Socket 通訊
1.UDP實現 (DatagramSocket)
【用戶端】
//首先建立一個DatagramSocket對象
DatagramSocket socket = new DatagramSocket(4567);
//建立一個InetAddress
InetAddress serverAddress = InetAddress.getByName("192.168.1.104");
String str = "hello"; //這是要傳輸的資料
byte data [] = str.getBytes(); //把傳輸內容分解成位元組
//建立一個DatagramPacket對象,並指定要講這個資料包發送到網路當中的哪個、地址,以及連接埠號碼
DatagramPacket packet = new DatagramPacket(data,data.length,serverAddress,4567);
//調用socket對象的send方法,發送資料
socket.send(packet);
【伺服器端】
//建立一個DatagramSocket對象,並指定監聽的連接埠號碼
DatagramSocket socket = new DatagramSocket(4567);
byte data [] = new byte[1024];
//建立一個空的DatagramPacket對象
DatagramPacket packet = new DatagramPacket(data,data.length);
//使用receive方法接收用戶端所發送的資料,
//如果用戶端沒有發送資料,該進程就停滯在這裡
socket.receive(packet);
String result = new String(packet.getData(),packet.getOffset(),packet.getLength());
2.TCP通訊
【用戶端】
建立一Socket對象並指明伺服器端的IP及連接埠號碼
Socket socket = new Socket("192.168.1.0",45678);
//向伺服器發送訊息
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
out.println(message);
//從伺服器接收訊息
BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String rString = is.readLine().toString();
【伺服器端】
//建立一個ServerSocket對象,並讓這個Socket在45678連接埠監聽
serverSocket = new ServerSocket(45678);
//調用ServerSocket的accept()方法,接受用戶端所發送的請求,
//如果用戶端沒有發送資料,那麼該線程就停滯不繼續
Socket socket = serverSocket.accept();
//從Socket當中得到InputStream對象
InputStream inputStream = socket.getInputStream();
byte buffer [] = new byte[1024*4];
int temp = 0;
//從InputStream當中讀取用戶端所發送的資料
while((temp = inputStream.read(buffer)) != -1)
{
String str = new String(buffer,0,temp);
//接下來可以對從用戶端接收到的訊息做處理
}
【Socket擷取用戶端IP地址及連接埠號碼】
Socket類包含一些非常有用的屬性,這些屬性允許確定關於正在串連的用戶端的資訊。其中關鍵資訊之一
是返回EndPoint對象的RemoteEndPoint屬性。EndPoint類本身是抽象的,要想收集有用的資訊,需·要把
EndPoint強制類型轉換為IPEndPoint對象。IPEndPoint類包含遠程用戶端的IP地址和連接埠號碼。具體用法如下:
TcpListener tcpl=new TcpListener(port);
Socket s=tcpl.AcceptSocket();
label1.text=((IPEndPoint)s.RemoteEndPoint).Address.ToString();
label2.text=((IPEndPoint)s.RemoteEndPoint).Port.ToString();
作者:zjbpku