TCP连接之客户端,涉及到如下三个函数,分别是:
/***************************** ** 函数功能: 用于与服务端进行TCP连接 ** 输入参数: IP:IP地址 Port:端口号 ** 输出参数: ******************************/ private void ClientConnect(string IP, string Port){}
/****************************** ** 函数功能: 用于向服务端发送信息 ** 输入参数: MsgType:TCP协议中的协议头部 ** 输出参数: ******************************/ private void ClientSendMsg(ushort MsgType){}
/****************************** ** 函数功能: 接受服务端发回的信息 ** 输入参数: ** 输出参数: ******************************/ private void RecMsg(){}
三者的关系图如下:
具体代码如下:
1、ClientConnect()
View Code
/****************************** ** 作者: *** ** 变更时间: 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()
View Code
/****************************** ** 作者: *** ** 变更时间: 2012-12-02 ******************************/ #region 发送节目全屏byte串信息到服务端的方法 private void ClientSendMsg(ushort MsgType) { //调用客户端套接字发送字节数组 socketClient.Send(addHeadBody); } #endregion
3、RecMsg()
View Code
/****************************** ** 作者: 郭乐彬 ** 变更时间: 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协议中规定的头部来决定后面的操作 } } }