TCP連接之客戶端,涉及到如下三個函數,分別是:
/***************************** ** 函數功能: 用於與服務端進行TCP連接 ** 輸入參數: IP:IP地址 Port:端口號 ** 輸出參數: ******************************/ private void ClientConnect(string IP, string Port){}
/****************************** ** 函數功能: 用於向服務端發送信息 ** 輸入參數: MsgType:TCP協議中的協議頭部 ** 輸出參數: ******************************/ private void ClientSendMsg(ushort MsgType){}
/****************************** ** 函數功能: 接受服務端發回的信息 ** 輸入參數: ** 輸出參數: ******************************/ private void RecMsg(){}
三者的關系圖如下:
具體代碼如下:
1、ClientConnect()

/****************************** ** 作者: *** ** 變更時間: 2012-12-02 ******************************/ #region 連接服務端方法 private void ClientConnect(string IP, string Port) { //定義一個套字節監聽 包含3個參數(IP4尋址協議,流式連接,TCP協議) socketClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //需要獲取文本框中的IP地址 IPAddress ipaddress = IPAddress.Parse(IP); //將獲取的ip地址和端口號綁定到網絡節點endpoint上 IPEndPoint endpoint = new IPEndPoint(ipaddress, int.Parse(Port)); //這里客戶端套接字連接到網絡節點(服務端)用的方法是Connect 而不是Bind socketClient.Connect(endpoint); //創建一個線程 用於監聽服務端發來的消息 threadClient = new Thread(RecMsg); //將窗體線程設置為與后台同步 threadClient.IsBackground = true; //啟動線程 threadClient.Start(); } #endregion
2、ClientSendMsg()

/****************************** ** 作者: *** ** 變更時間: 2012-12-02 ******************************/ #region 發送節目全屏byte串信息到服務端的方法 private void ClientSendMsg(ushort MsgType) { //調用客戶端套接字發送字節數組 socketClient.Send(addHeadBody); } #endregion
3、RecMsg()

/****************************** ** 作者: 郭樂彬 ** 變更時間: 2012-11-30 ******************************/ #region 接收服務端發來信息的方法 private void RecMsg() { while (true) //持續監聽服務端發來的消息 { //定義一個1024*200的內存緩沖區 用於臨時性存儲接收到的信息 byte[] arrRecMsg = new byte[1024 * 200]; //將客戶端套接字接收到的數據存入內存緩沖區, 並獲取其長度 int length = socketClient.Receive(arrRecMsg); byte[] tem = new byte[24]; Array.Copy(arrRecMsg, 0, tem, 0, 24); ByteToObject bytetoobject = new ByteToObject(); //MsgHead為一個自定義的結構體 MsgHead msghead = (MsgHead)bytetoobject.BytesToStuct(tem, typeof(MsgHead)); switch (msghead.MsgType) { //根據自定義的TCP協議中規定的頭部來決定后面的操作 } } }