目录
写在前面
TcpListener 和 TcpClient 是在 System.Net.Sockets.Socket 类的基础上做的进一步封装,使用 GetStream 方法返回网络流,由于是以流的方式读取数据,所以在使用过程中更容易有粘包和分包的问题,还不如直接使用Socket类来的方便。
代码实现
服务端代码
static void TcpListenerTest()
{
Console.WriteLine("TcpListener Server");
var tcpListener = new TcpListener(IPAddress.Parse("127.0.0.1"), 9090);
tcpListener.Start();
Console.WriteLine("TcpListener Start");
var task = Task.Run(() =>
{
while (true)
{
var tcpClient = tcpListener.AcceptTcpClient();
var buffer = new byte[tcpClient.ReceiveBufferSize];
var stream = tcpClient.GetStream();
stream.Read(buffer, 0, buffer.Length);
stream.Close();
tcpClient.Close();
var receivedMsg = string.Empty;
receivedMsg += Encoding.UTF8.GetString(buffer).Trim('\0');
Console.WriteLine("收到消息:" + receivedMsg);
// 服务端心跳间隔
Thread.Sleep(1000);
}
});
Console.ReadLine();
}
客户端代码
static void TcpClientTest()
{
Console.WriteLine("TcpClient");
var msg = "这是来自客户端的消息111";
var client = new TcpClient("127.0.0.1", 9090);
var sendStream = client.GetStream();
var sendBytes = Encoding.Default.GetBytes(msg);
sendStream.Write(sendBytes, 0, sendBytes.Length);
sendStream.Flush();
sendStream.Close();//关闭网络流
client.Close();//关闭客户端
Console.WriteLine(msg);
Console.ReadLine();
}
执行结果