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