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(); //关闭连接
}
}
|