TCP(Transmission Control Protocol 傳輸控制協(xié)議)是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議。 三次握手協(xié)議建立連接圖 握手過(guò)程步驟如下(配wireshark分析圖): 1、客戶端發(fā)送SYN(SEQ=1022)報(bào)文給服務(wù)器端,客戶端進(jìn)入SYN_SEND狀態(tài)。 2、服務(wù)器端收到SYN報(bào)文,回應(yīng)一個(gè)SYN (SEQ=2032)ACK(ACK=1022+1)報(bào)文,服務(wù)器段進(jìn)入SYN_RECV狀態(tài)。 注意:服務(wù)器根據(jù)syn=1判斷客戶端請(qǐng)求建立連接,返回ack=1 3、客戶端收到服務(wù)器端的SYN報(bào)文,回應(yīng)一個(gè)ACK(ACK=2032+1)報(bào)文,進(jìn)入Established狀態(tài)。 注意:確認(rèn)ack number是否與第一次發(fā)送(seq number+1)相等,并ack=1。正確,發(fā)送ack number = seq number(服務(wù)器順序編號(hào))+1 服務(wù)器端:確認(rèn)ack number是否與第一次發(fā)送(seq number+1)相等,并ack=1。正確,連接建立。 連接建立完成,可以傳送數(shù)據(jù)了。 java測(cè)試源碼(只有握手部分)服務(wù)器代碼:
package com.wangshihai.util;import java.io.IOException;import java.net.InetAddress;import java.net.ServerSocket;import java.net.Socket;/** * * @ClassName: TCPServerSocket* @Description: TODO(tcp server socket類型)* @author 技術(shù)雜貨鋪 wangshihai.com* @date 2015年7月25日 上午8:49:54* */public class TCPServerSocket { private static ServerSocket serverSocket; private static Socket socket; /** * * @Title: startServerSocket * @Description: TODO(根據(jù)端口,綁定本機(jī)地址,建立serversocket) * @param @param bindPort 綁定端口 * @param @param bindIp 綁定地址 * @param @param blocknumber 允許客戶端連接的個(gè)數(shù) * @return void 返回類型 * @throws */ public static void startServerSocket(int bindPort,String bindIp,int blocknumer){ try { serverSocket = new ServerSocket(bindPort,blocknumer,InetAddress.getByName(bindIp)); socket = serverSocket.accept(); System.out.println('連接的客戶端地址和端口為:'+socket.getRemoteSocketAddress()); } catch (IOException e) { e.printStackTrace(); } } /** * * @Title: main * @Description: TODO(測(cè)試防范) * @param @param args 設(shè)定文件 * @return void 返回類型 * @throws */ public static void main(String[] args) { startServerSocket(6000,'192.168.2.100',3); }} 客戶端代碼:
package com.wangshihai.util;import java.io.IOException;import java.net.InetAddress;import java.net.Socket;import java.net.UnknownHostException;/** * * @ClassName: TCPClientSocket* @Description: TODO(連接server socket 工具類)* @author 技術(shù)雜貨鋪 wangshihai.com* @date 2015年7月25日 上午9:17:33* */public class TCPClientSocket { private static Socket socket; /** * * @Title: connectServerSocket * @Description: TODO(根據(jù)服務(wù)器的IP和端口,建立socket連接) * @param @param bindPort 訪問(wèn)的服務(wù)器端口 * @return void 返回類型 * @throws */ public static void connectServerSocket(int bindPort){ InetAddress inetAddress; try { //根據(jù)字符串IP獲取inetaddress對(duì)象 inetAddress = InetAddress.getByName('192.168.2.100'); socket = new Socket(inetAddress, bindPort); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * * @Title: main * @Description: TODO(測(cè)試方法) * @param @param args 設(shè)定文件 * @return void 返回類型 * @throws */ public static void main(String[] args) { int bindPort = 6000; connectServerSocket( bindPort); }} |
|
來(lái)自: 昵稱29273511 > 《待分類》