Tcp 同步通信基础
Tcp 同步通信基础
我是12年进入一家游戏公司的,刚开始进来几乎什么都不知道的状态。记得刚进公司,我的老大给我的第一份任务就是写一份联网版的坦克大战,第一次接触Socket,从此走上了一条不归路。
在写坦克中,遇到了很多问题,网上也没什么比较适合的教程,所以想写点基础的东西,让后来者不至于走那么多的弯路,也是对自己过往的总结。
既然是Tcp 基础,那么我们就从基础开始,new 一个Socket 对象先。
Tcp 通信需要服务端和客户端,
通信分两种:同步和异步
服务端代码:
class Program { private static Socket socket; static void Main(string[] args) { socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); var hostAddresss = Dns.GetHostAddresses(Dns.GetHostName()); var localAddress = hostAddresss.First(p => p.AddressFamily == AddressFamily.InterNetwork); var ipEndPoint = new IPEndPoint(localAddress, 4572); socket.Bind(ipEndPoint); socket.Listen(10); Console.WriteLine("绑定本地网络端点成功..."); Console.WriteLine("开始监听客户进入..."); OnClientEnterListener(); } private static void OnClientEnterListener() { while (true) { var clientSocket = socket.Accept(); var endPoint = clientSocket.RemoteEndPoint; Console.WriteLine("客户:" + endPoint.ToString() + " 进入..."); var str = "Hello World!"; var data = Encoding.UTF8.GetBytes(str); clientSocket.Send(data); clientSocket.Close(); Console.WriteLine("服务端断开了客户:" + endPoint.ToString() + " 的连接..."); } }
}
先获取本机的IPv4地址,然后创建一个网络端点,端口为:4572
把Socket 绑定到端点上,开始监听其他的Socket客户连接进来。
客户进入以后我们会发送Hello World! 采用UTF-8编码,然后关闭Socket。
客户端代码:
class Program { private static Socket socket; static void Main(string[] args) { socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); var hostAddresss = Dns.GetHostAddresses(Dns.GetHostName()); var localAddress = hostAddresss.First(p => p.AddressFamily == AddressFamily.InterNetwork); var ipEndPoint = new IPEndPoint(localAddress, 4572); try { socket.Connect(ipEndPoint); Console.WriteLine("连接服务器:" + ipEndPoint.ToString() + " 成功..."); OnReceiveDataListener(); Console.ReadLine(); } catch (Exception ex) { Console.WriteLine("连接服务器异常:"); Console.WriteLine(ex.Message); } } private static void OnReceiveDataListener() { var buffer = new byte[1024]; int number = socket.Receive(buffer, SocketFlags.None); string str = Encoding.UTF8.GetString(buffer, 0, number); Console.WriteLine("接收到服务器消息:" + str); } }
同样,创建网络端点,这个端点是欲连接的服务器监听的端点,
如果连接 Socket.Connect() 失败,会抛异常,所以我们try catch 下。
然后监听数据进入,Socket.Receive() 返回的是接收到的数据的大小。同样用UTF-8编码转成String.
这就是最简单的Socket 服务端与客户端通信。

浙公网安备 33010602011771号