好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

使用C#实现基于TCP和UDP协议的网络通信程序的基本示例

C#中使用TCP通信

TCP通信需要通信双方都在线,所以需要先启动服务端进行监听,客户端才能获得连接,服务端代码:

?

static void Main( string [] args)

     {

       TcpClient client = null ;

       NetworkStream stream = null ;

       byte [] buffer = null ;

       string receiveString = null ;

 

       IPAddress localIP = IPAddress.Parse( "127.0.0.1" );

       int localPort = 11000;

       TcpListener listener = new TcpListener(localIP, localPort); //用本地IP和端口实例化Listener

       listener.Start(); //开始监听

       while ( true )

       {

         client = listener.AcceptTcpClient(); //接受一个Client

         buffer = new byte [client.ReceiveBufferSize];

         stream = client.GetStream(); //获取网络流

         stream.Read(buffer, 0, buffer.Length); //读取网络流中的数据

         stream.Close(); //关闭流

         client.Close(); //关闭Client

 

         receiveString = Encoding.Default.GetString(buffer).Trim( '\0' ); //转换成字符串

         Console.WriteLine(receiveString);

       }

     }

只有服务端开启监听后,客户端才能正确连接,所以服务端要一直开启监听,客户端每次发送数据,都要首先与服务端建立连接,连接建立完成后才进行数据发送。客户端代码:

?

static void Main( string [] args)

     {

       string sendString = null ; //要发送的字符串

       byte [] sendData = null ; //要发送的字节数组

       TcpClient client = null ; //TcpClient实例

       NetworkStream stream = null ; //网络流

 

       IPAddress remoteIP = IPAddress.Parse( "127.0.0.1" ); //远程主机IP

       int remotePort = 11000; //远程主机端口

 

       while ( true ) //死循环

       {

         sendString = Console.ReadLine(); //获取要发送的字符串

         sendData = Encoding.Default.GetBytes(sendString); //获取要发送的字节数组

         client = new TcpClient(); //实例化TcpClient

         try

         {

           client.Connect(remoteIP, remotePort); //连接远程主机

         }

         catch (System.Exception ex)

         {

           Console.WriteLine( "连接超时,服务器没有响应!" ); //连接失败

           Console.ReadKey();

           return ;

         }

         stream = client.GetStream(); //获取网络流

         stream.Write(sendData, 0, sendData.Length); //将数据写入网络流

         stream.Close(); //关闭网络流

         client.Close(); //关闭客户端

       }

     }

 

C#中使用UDP通信
UDP通信是无连接通信,客户端在发送数据前无需与服务器端建立连接,即使服务器端不在线也可以发送,但是不能保证服务器端可以收到数据。
服务器端代码:

?

static void Main( string [] args)

     {

       UdpClient client = null ;

       string receiveString = null ;

       byte [] receiveData = null ;

       //实例化一个远程端点,IP和端口可以随意指定,等调用client.Receive(ref remotePoint)时会将该端点改成真正发送端端点

       IPEndPoint remotePoint = new IPEndPoint(IPAddress.Any, 0);

 

       while ( true )

       {

         client = new UdpClient(11000);

         receiveData = client.Receive( ref remotePoint); //接收数据

         receiveString = Encoding.Default.GetString(receiveData);

         Console.WriteLine(receiveString);

         client.Close(); //关闭连接

       }

     }

客户端代码:

?

static void Main( string [] args)

     {

       string sendString = null ; //要发送的字符串

       byte [] sendData = null ; //要发送的字节数组

       UdpClient client = null ;

 

       IPAddress remoteIP = IPAddress.Parse( "127.0.0.1" );

       int remotePort = 11000;

       IPEndPoint remotePoint = new IPEndPoint(remoteIP, remotePort); //实例化一个远程端点

 

       while ( true )

       {

         sendString = Console.ReadLine();

         sendData = Encoding.Default.GetBytes(sendString);

 

         client = new UdpClient();

         client.Send(sendData, sendData.Length, remotePoint); //将数据发送到远程端点

         client.Close(); //关闭连接

       }

     }

dy("nrwz");

查看更多关于使用C#实现基于TCP和UDP协议的网络通信程序的基本示例的详细内容...

  阅读:46次