C#的TCP通信

.NET的UDP通信我死活玩不转,听说UDP库类有bug,所以我就不瞎折腾了,精力转向TCP。
TCP是连接模型,如下:

服务器连接                     服务器断开
    ↓                                   ↑
服务器接收→服务器处理→服务器发送
    ↑                                   ↓
客户端发送←客户端处理←客户端接收
    ↑                                   ↓
客户端连接                     客户端断开

服务器代码如下:
// ServerListen
TcpListener tcplistener = new  TcpListener( int .Parse(txtPort.Text));
tcplistener.Start();
byte [] btServerReceive = new   byte [ 256 ];
string  strServerReceive = string .Empty;
// Loop for Listen
while ( true )
{
 TcpClient tcp
= tcplistener.AcceptTcpClient();
 NetworkStream ns
= tcp.GetStream();
 
int  intReceiveLength =  ns.Read(btServerReceive, 0 ,btServerReceive.Length);
 strServerReceive
= UnicodeEncoding.Unicode.GetString(btServerReceive, 0 ,intReceiveLength);
 txtServerResult.AppendText(
" ServerReceive: "   +  strServerReceive + " " );
 ns.Write(btServerReceive,
0 ,btServerReceive.Length);
 txtServerResult.AppendText(
" ServerSend: "   +  strServerReceive + " " );
 tcp.Close();
}

客户端代码如下:
// ClientSend
TcpClient tcp = new  TcpClient(txtHost.Text, int .Parse(txtPort.Text));
byte [] btClientSend = UnicodeEncoding.Unicode.GetBytes(txtClientResult.Text);
NetworkStream ns
= tcp.GetStream();
ns.Write(btClientSend,
0 ,btClientSend.Length);
// ClientReceive
byte [] btClientReceive = new   byte [ 256 ];
int  intReceiveLength =  ns.Read(btClientReceive, 0 ,btClientReceive.Length);
string  strClientReceive = UnicodeEncoding.Unicode.GetString(btClientReceive, 0 ,intReceiveLength);
tcp.Close();
txtClientResult.Text
= strClientReceive;
 
下面是一个简单的 C# TCP 客户端示例代码: ```csharp using System; using System.Net.Sockets; class Program { static void Main(string[] args) { try { // 创建一个 TcpClient 实例 TcpClient client = new TcpClient(); // 连接服务器 client.Connect("127.0.0.1", 8888); // 获取网络流 NetworkStream stream = client.GetStream(); // 发送数据 byte[] data = System.Text.Encoding.UTF8.GetBytes("Hello, Server!"); stream.Write(data, 0, data.Length); // 接收数据 data = new byte[256]; int bytes = stream.Read(data, 0, data.Length); string responseData = System.Text.Encoding.UTF8.GetString(data, 0, bytes); Console.WriteLine("Received: {0}", responseData); // 关闭连接 stream.Close(); client.Close(); } catch (Exception ex) { Console.WriteLine("Exception: {0}", ex); } Console.ReadLine(); } } ``` 在上面的示例代码,我们使用了 `TcpClient` 类来创建一个 TCP 客户端实例,并使用 `Connect` 方法连接服务器。然后,我们使用 `GetStream` 方法获取网络流,以便发送和接收数据。在发送数据时,我们将字符串转换成字节数组,并使用 `Write` 方法将数据发送到服务器。在接收数据时,我们创建一个字节数组来存储接收到的数据,并使用 `Read` 方法从网络流读取数据。最后,我们将接收到的数据转换回字符串,并将其输出到控制台。最后,我们关闭流和客户端连接。 请注意,上面的示例代码仅用于演示如何创建一个简单的 TCP 客户端。在实际开发,您需要考虑到更多的异常情况和错误处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值