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