C#中使用TCP通信
TCP通信需要通信双方都在线,所以需要先启动服务端进行监听,客户端才能获得连接,服务端代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
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); } } |
只有服务端开启监听后,客户端才能正确连接,所以服务端要一直开启监听,客户端每次发送数据,都要首先与服务端建立连接,连接建立完成后才进行数据发送。客户端代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
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通信是无连接通信,客户端在发送数据前无需与服务器端建立连接,即使服务器端不在线也可以发送,但是不能保证服务器端可以收到数据。
服务器端代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
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(); //关闭连接 } } |
客户端代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
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(); //关闭连接 } } |