.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;
// 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;