C# Socket的TCP通讯的实例代码

2019-12-30 15:18:58刘景俊

1、 开启侦听接口


private TcpListener listener;        //监听类

listener = new TcpListener(new IPEndPoint(IPAddress.Parse(ip), port));

listener.Start();//开启侦听,对连接的客户端的数目没有限制

或者


listener.Start(int i);// 开启侦听,最多只能连接i个客户端数目 

2、 接收客户端

listener.BeginAcceptSocket(clientConnect, listener);//异步接受客户端的连接请求  clientConnect为连接的回调函数


     /// <summary>

    /// 接收回调函数

    /// </summary>

    /// <param name="ar"></param>

    private void clientConnect(IAsyncResult ar)

    {

    try

      {
        TcpListener listener = (TcpListener)ar.AsyncState;
        //接受客户的连接,得到连接的Socket
        Socket client = listener.EndAcceptSocket(ar);

      }

      catch { }

    } 

3、 接收客户端发送的数据


/// <summary> 

/// 异步接收数据

 /// </summary>

 private void receiveData(Socket client)

{

   // 调用异步方法 BeginReceive 来告知 socket 如何接收数据
  IAsyncResult iar = client.BeginReceive(buffer, 0, BagSize, SocketFlags.None, out errorCode, receiveCallback, buffer);

      }

   }

    /// <summary>

    /// 接收数据回调函数

    /// </summary> 

    /// <param name="ar"></param>

    private void receiveCallback(IAsyncResult ar)

    {     
        //接收到的数据长度.
        int receLen = 0;

        try

        {
          receLen = client.EndReceive(ar, out errorCode);        

if (receLen > 0)

         {
           OnReceiveData(client);//接收到数据之后的处理函数

          }
        }
       catch {   }

      }
      else { }

    } 

4、接收成功之后,回发数据给客户端


/// <summary>

/// 异步发送报文
/// </summary>

 /// <param name="data"></param>
 private void OnReceiveData (Socket socket)

{
     string strLogin = “succeed recived”;

byte[] data = Encoding.ASCII.GetBytes(strLogin);

 socket.BeginSend(data, 0, data.Length, SocketFlags.None, out errorCode, sendCallBack, socket);//异步发送数据

     }

      else

      { }

    }

/// <summary>

 /// 异步发送回调事件

 /// </summary>

 /// <param name="ar"></param>

private void sendCallBack(IAsyncResult ar)

    {

socket.EndSend(ar, out errorCode);

     } 

客户端

1、连接服务器


private TcpClient tcpcz = null

 tcpcz = new TcpClient()

 tcpcz.BeginConnect(ipaddress, Convert.ToInt32(port), new AsyncCallback(ConnectCallback), tcpcz);//根据服务器的IP地址和端口号 异步连接服务器

 /// <summary>

/// 异步连接的回调函数

 /// </summary>

 /// <param name="ar"></param>

 private void ConnectCallback(IAsyncResult ar)

    {

      TcpClient t = (TcpClient)ar.AsyncState;

      try

      {

        if (t.Connected)

        {

          t.EndConnect(ar);//函数运行到这里就说明连接成功

        }

        else

        {

        }

      }

      catch () {  }

    }