1. 程式人生 > >Socket網路程式設計基礎

Socket網路程式設計基礎

1 網路程式設計簡述

物理埠:

邏輯埠:用於標識程序的邏輯地址,不同程序的標識;有效埠:0~65535,其中0~1024系統使用或保留埠。

java 中ip物件:InetAddress.

importjava.net.*;
class  IPDemo{
    public static void main(String[] args)throws UnknownHostException{
       //通過名稱(ip字串or主機名)來獲取一個ip物件。
InetAddressip =InetAddress.getByName("www.baidu.com");//java.net.UnknownHostException
       System.out.println("addr:"+ip.getHostAddress());
       System.out.println("name:"+ip.getHostName());
    }
}

Socket:套接字-通訊的端點--主機地址:埠

就是為網路服務提供的一種機制,通訊的兩端都有Socket,網路通訊其實就是Socket間的通訊,資料在兩個Socket間通過IO傳輸。

2 UDP傳輸

1:只要是網路傳輸,必須有socket 。

2:資料一定要封裝到資料包中,資料包中包括目的地址、埠、資料等資訊。

    udp=>DatagramSocket  資料包=》DatagramPacket

   直接操作udp不可能,java語言將其封裝成有udp傳輸協議的socket物件DatagramSocket

   因為資料包中包含的資訊較多,為了方便操作,也封裝成物件DatagramPacket

.通過物件方法獲取資料包中的各種資訊。

DatagramSocket具備傳送和接受功能,在進行udp傳輸時,要明確傳送端和接收端。

2.1 udp的傳送端

udp的傳送端:

1:建立udp的socket服務,建立物件時如果沒有明確埠,系統自動分配一個未被使用的埠。

2:明確要傳送的具體資料

3:將資料封裝成資料包

4:用socket服務的send方法傳送資料包

5:關閉服務資源

importjava.net.*;
class  UdpSend{
    public static void main(String[] args)throwsException {
//   1:建立udp的socket服務,並指定埠
       DatagramSocket ds = new DatagramSocket(8888);
//   2:明確要傳送的具體資料。
       String text = "udp傳輸資料";
       byte[] buf = text.getBytes();
//   3:將資料封裝成資料包。
       DatagramPacket dp = newDatagramPacket(buf,buf.length,InetAddress.getByName("10.1.31.127"),10000);
//   4:用socket服務的send方法傳送資料包。
       ds.send(dp);
//   5:關閉服務資源。
       ds.close();
    }
}


2.2 udp的接收端

UDP的接收端:

1:建立udp的socket服務,明確一個埠,便於接受傳送到這個埠的資料,不處理其他資料。

2:定義資料包,用於儲存接收資料。

3:通過socket服務的receive()方法將收到的資料儲存到資料包中。

4:通過資料包的方法獲取資料包中的具體資料內容,比如ip、埠、資料等等。

5,關閉服務資源。

class UdpRece {
    public static void main(String[] args)throws Exception{
//  1:建立udp的socket服務。
       DatagramSocket ds = newDatagramSocket(10000);
//  2:定義資料包,用於儲存接收到資料。先定義位元組陣列,資料包會把資料儲存到位元組陣列中。
       byte[] buf = new byte[1024];
       DatagramPacket dp = newDatagramPacket(buf,buf.length);
//  3:通過socket服務的接收方法將收到的資料儲存到資料包中。
       ds.receive(dp);//該方法是阻塞式方法。
//  4:通過資料包的方法獲取資料包中的具體資料內容,比如ip,埠,資料等等。
       String ip = dp.getAddress().getHostAddress();
       int port = dp.getPort();
       String text = newString(dp.getData(),0,dp.getLength());//獲位元組陣列中有效部分。
       System.out.println(ip+":"+port+"--"+text);
//5:關閉服務資源。
       ds.close();
    }
}

3 TCP傳輸

TCP傳輸:兩個端點的建立連線後會有一個傳輸資料的通道,稱為,而且是建立在網路基礎上的流,稱之為socket流。該流中既有讀取,也有寫入。

TCP的兩個端點:一個是客戶端,一個是服務端。

客戶端:對應的物件,Socket

服務端:對應的物件,ServerSocket

3.1 TCP客戶端

1:建立tcp的socket服務,最好明確具體的目的地址和目的埠。這個物件在建立時,就已經可以對指定ip和埠進行連線(三次握手)。

2:如果連線成功,就意味著通道建立了,產生了socket流就。只要獲取到socket流中的讀取流和寫入流即可,只要通過getInputStream和getOutputStream就可以獲取兩個流物件。

3:關閉資源。

importjava.net.*;
importjava.io.*;
//需求:客戶端給伺服器端傳送一個數據。
class  TcpClient{
    public static void main(String[] args)throws Exception{
       Socket s = newSocket("10.1.31.69",10002);
       OutputStream out = s.getOutputStream();//獲取了socket流中的輸出流物件。
       out.write("TCP資料!".getBytes());
       s.close();
    }
}

3.2 TCP服務端

1:建立服務端ServerSocket服務,並監聽一個埠。

2:通過ServerSocket服務物件的accept方法獲取連線過來的客戶端物件(服務端為了給客戶端提供服務,要獲取客戶端物件傳輸的內容)。

3:通過獲取到的客戶端socket物件中的socket流(輸入流)和具體的客戶端進行通訊。

4:如果通訊結束,關閉資源。(注意:要先關客戶端,再關服務端。)

class  TcpServer{
    public static void main(String[] args) throwsException{
       ServerSocket ss = new ServerSocket(10002);//建立服務端的socket服務
       Socket s = ss.accept();//獲取客戶端物件
       String ip =s.getInetAddress().getHostAddress();
       System.out.println(ip+".....connected");
//     可以通過獲取到的socket物件中的socket流和具體的客戶端進行通訊。
       InputStream in = s.getInputStream();//讀取資料,使用客戶端物件socket讀取流
       byte[] buf = new byte[1024];
       int len = in.read(buf);
       String text = new String(buf,0,len);
       System.out.println(text);
//     4:如果通訊結束,關閉資源。注意:要先關客戶端,在關服務端。
       s.close();
       ss.close();
    }
}


相關推薦

Socket網路程式設計基礎

1 網路程式設計簡述 埠 物理埠: 邏輯埠:用於標識程序的邏輯地址,不同程序的標識;有效埠:0~65535,其中0~1024系統使用或保留埠。 java 中ip物件:InetAddress. importjava.net.*; class IPDemo{

socket網路程式設計基礎

         首先列舉一下socket網路通訊的例子:使用區域網打遊戲,用瀏覽器連線外網看視訊,使用QQ與好友通訊,手機連線wifi傳資料等等。socket是底層抽象給應用層所使用的一套介面函式,本篇講解這些函式的使用。 物件:1、伺服器server(等待客戶端連線)

網路程式設計基礎【day08】:簡單socket例項(二)

本節內容 1、概述 2、socket例項 3、總結 一、概述   之前我們只是介紹了soket的概念和一些邏輯圖表,下面我們來看看,socket的客戶端和服務端到底是怎麼用的? 二、socket例項 2.1 客戶端 2.1.1 客戶端程式碼邏輯圖 2.1.2 客戶端程式碼

網路程式設計基礎【day09】:socket接收大資料(五)

本節內容 1、概述 2、socket接收大資料 3、中文字元的坑 一、概述   上篇部落格寫到了,就是說當伺服器傳送至客戶端的資料,大於客戶端設定的資料,則就會把資料服務端發過來的資料剩餘資料存在IO緩衝區中,那我們如何解決這個問題呢?   有的同學就說了: 改大客戶端接收的資料的大小=&

網路程式設計基礎【day09】:socket解決粘包問題之MD5(八)

本節內容 1、概述 2、程式碼實現 一、概述   上一篇部落格講到的用MD5來校驗還是用的之前解決粘包的方法,就是客戶端傳送一個請求,等待服務端的確認的這樣的一個笨方法。下面我們用另外一種方法:就是客戶端已經知道可接收多少資料了,既然客戶端已經知道接收多少資料了,那麼客戶端在接收資料的時候,正好接收已

python網路程式設計基礎socket粘包現象

粘包現象兩種     登陸 #服務端import json import socket server=socket.socket()#建立socket物件 ip_port=('127.0.0.1',8001)#獲取本機迴環地址和通訊埠號 server.bind(ip_port)#繫結ip地址和埠

Linux網路程式設計基礎API--socket檔案描述符API

《Linux高效能伺服器程式設計》閱讀筆記: 1. 建立socket   Linux系統上”一切皆是檔案“,socket也不例外,它是可讀/可寫/可控制/可關閉的檔案描述符。要實現socket通訊,雙方都需要建立各自的socket物件。 #include

C# WinForm基礎socket網路程式設計

一、Socket網路程式設計 1、概念:Socket    英文願意是孔或插座。作為BSD UNIX的程序通訊機制,取後一種意思,通常也稱作“套接字”,用於描述IP地址和埠,是一個通訊鏈的控制代碼,可以用來實現不同虛擬機器或不同計算機之間的通訊。 2、理解: 客戶端如果要連

java:socket 網路程式設計

socket的通俗解釋: 套接字=主機+埠號。兩個東西配在一起,叫做“配套”。 另外“套”也有對應的意思,它可以把網路上的兩個應用對應起來,所以用“套”。 它是用來與另一個應用連線的,所以用“接”。 又因為它是一小段資料,很小一小段,所以叫“字”。 “套接字",就是一小段用來將網路個兩個應用

[Socket網路程式設計]一個封鎖操作被對 WSACancelBlockingCall 的呼叫中斷。

原文地址:http://www.cnblogs.com/xiwang/archive/2012/10/25/2740114.html記錄在此,方便查閱。 C#中在使用UDPClient迴圈監聽埠,在斷開UPDClient的時候,使用try...catch捕獲了異常,System.NET.Socket

Python_day6:socket網路程式設計

一、socket   socket即套接字,用於描述IP地址和埠,是一個通訊鏈的控制代碼,應用程式通常通過"套接字"向網路發出請求或者應答網路請求。   最簡單的socket,一次 1 import socket 2 server = socket.socket() #獲得例項

python_day26__socket網路程式設計基礎程式設計知識

server.py (server服務端): #Author:'haijing'#date:2018/10/30#服務端:在別人的哪裡import socket #socket是一個介面 內部封裝了有關ip地址和埠號的資訊 並且建立ip和埠號#在socket類中family=AE_INET type=SO

網路程式設計基礎【day10】:我是一個程序(三)

一、引子 我聽說我的祖先們生活在專用計算機裡, 一生只幫助人類做一件事情,比說微積分運算 了、人口統計了 、生成密碼、甚至通過織布機印花 !   如果你想在這些專用“計算機”上乾點別的事兒,例如安裝個遊戲玩玩, 那是絕對不可能的, 除非你把它拆掉, 然後建一個全新的機器。  

網路程式設計基礎【day10】:我是一個執行緒(四)

本節內容 1、第一回 初生牛犢 2、第二回 漸入佳境 3、第三回 虎口脫險 4、第四回 江湖再見 第一回 初生牛犢 我是一個執行緒,我一出生就被編了個號:0x3704,然後被領到一個昏暗的屋子裡,在這裡我發現了很多和我一模一樣的同伴。 我身邊的同伴0x6900 待的時間比較長,他帶著滄桑的口氣對

python------Socket網路程式設計(二)粘包問題

一.socket網路程式設計  粘包:服務端兩次傳送指令在一起,它會把兩次傳送內容合在一起傳送,稱為粘包,從而出現錯誤。 解決方法:(比較low的方法) 有些需要實時更新的,用sleep有延遲,不能這樣解決問題。 解決方法之高階方法: 客戶端: 二.傳送檔案 ftp s

Java網路程式設計基礎部分

轉載:文章來源 網路通訊協議 網路通訊協議有很多種,目前應用最廣泛的是TCP/IP協議(Transmission Control Protocal/Internet Protoal傳輸控制協議/英特網互聯協議),它是一個包括TCP協議和IP協議,UDP(User Datagram Protoco

網路程式設計基礎【day10】:作業系統介紹

一、為什麼要有作業系統 現代的計算機系統主要是由一個或者多個處理器,主存,硬碟,鍵盤,滑鼠,顯示器,印表機,網路介面及其他輸入輸出裝置組成。 一般而言,現代計算機系統是一個複雜的系統。 其一:如果每位應用程式設計師都必須掌握該系統所有的細節,那就不可能再編寫程式碼了(嚴重影響了程式設計師的開發效率:全部

Socket網路程式設計進階與實戰資源分享

Socket網路程式設計進階與實戰資源分享 Socket網路程式設計進階與實戰資源分享 獲取資源新增qq+2100776785 獲取資源新增qq+2100776785 第1章 課程介紹 本章將從軟體測試的起源與發展、測試行業的現狀及職業生涯規劃等整體做介紹。 第2章 軟體測試工程師必

python 協程及socket網路程式設計

協程 什麼是協程 協程,英文Coroutines,是一種比執行緒更加輕量級的存在。正如一個程序可以擁有多個執行緒一樣,一個執行緒也可以擁有多個協程。 最重要的是,協程不是被作業系統核心所管理,而完全是由程式所控制(也就是在使用者態執行)。 這樣帶來的好處就是效能得到了很大的提升,不會

Python Socket網路程式設計(一)初識SocketSocket初步使用

目錄 前言 網路程式設計 實質 IP地址和埠 資料傳輸協議 協議 Socket