C# — WinForm TCP连接之客户端

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协议中规定的头部来决定后面的操作
       }
     }
}

 

转载于:https://www.cnblogs.com/guolebin7/archive/2013/04/08/3006521.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值