在unity做强联网游戏的时候一般会选择用tcp来做通信(据说有一种udp的传输具有更高的效率),而接收信息的方法上一般会选择新建一个线程循环读取。
今天在我们项目上看到另外的一种方法。这里记录一下。
首先建立tcp连接
#using System.Net.Sockets;
TcpClient tcpClient = new TcpClient();
tcpClient .BeginConnect(address,port,new AsyncCallback(this.OnConnect),result);
可以看到这里用的是异步通信回调函数
AsyncCallback
private void OnConnect(IAsyncResult ar)
{
ConnectResult result = ar.AsyncState as ConnectRsult;
try
{
result.client.EndConnect(ar);
int size = HeaderLength;//定好的表头大小
byte[] readBuf = new byte[size];
result.client.GetStream().BeginRead(readBuf,0,size,new AsyncCallback(this.OnRead),new RecvIremObject(result.client,readBuf,size));
}
catch(System.Net.Sockets.SocketException e)
{
}
}
上面是连接成功后的函数,连接成功后就可以断开