Server端:
- 聲明IP、Port、TcpListener、TcpClient、NetworkStream等;
- 初始化各個字段;
- 創建TcpListener對象,Start指定的Port監聽:
TcpListener tcpListener=new TcpListener(IP,Port);
tcpListener.Start();
- 創建Thread,循環調用AcceptTcpClient方法接受Client的連接請求,從AcceptTcpClient返回的結果中得到與該Client對應的TcpClient對象,利用該對象的GetStream方法得到netWorkStream對象及BinaryReader和BinaryWrite對象;
Thread threadAccept=new Thread(AcceptTcpClientConnect);
threadAccept.Start();
private void AcceptTcpClientConnect()
{
while(true)
{
try
{
tcpClient=tcpListener.AcceptTcpClient();
if(tcpClient!=null)
{
...
netWorkStream=tcpClient.GetStream();
br=new BinaryReader(netWorkStream);
bw=new BinaryWriter(netWorkStream);
}
}
catch
{
...
}
}
}
- 每得到一個新的tcpClient對象,就創建一個對應的thread,在thread中與Client進行通信;
- 斷開連接,關閉監聽:
tcpListener.Stop();
Client端:
- 利用TcpClient的構造函數創建一個TcpClient對象:
private TcpClient tcpClient=new TcpClient();
- 使用Connect方法與服務器建立連接:
tcpClient.Connect(remoteHostName,int.Parse(__txtPort.text));
- 利用TcpClient的GetStream獲得網絡流,利用該網絡流與服務器進行數據傳輸:
if(tcpClient!=null)
{
netWorkStream=tcpClient.GetStream();
br=new BinaryReader(netWorkStream);
bw=new BinaryWriter(netWorkStream);
}
- 創建一個線程監聽制定的端口,循環接受並處理服務器發送過來的消息:
Thread threadReceive=new Thread(ReceiveMessage);
threadReceive.Start();
private void ReceiveMessage()
{
while(true)
{
try
{
string receiveMessage=br.ReadString();//從流中讀取對象
if(receiveMessage!=null)
{
__txtShowMessage.Invoke(showMessage,receiveMessage)
}
}
catch
{
break;
}
}
}
20150305