六盘水市城乡建设局网站,做网站的销售能干什么,html静态网页作业成品,佛山网站设计哪家便宜目录
写在前面
代码实现 服务端部分
客户端部分
运行示例 总结 写在前面
在.Net的 System.Net.Sockets 命名空间中包含托管的跨平台套接字网络实现。 System.Net 命名空间中的所有其他网络访问类均建立在套接字的此实现之上。
其中的Socket 类是基于与 Linux、macOS 或 W…目录
写在前面
代码实现 服务端部分
客户端部分
运行示例 总结 写在前面
在.Net的 System.Net.Sockets 命名空间中包含托管的跨平台套接字网络实现。 System.Net 命名空间中的所有其他网络访问类均建立在套接字的此实现之上。
其中的Socket 类是基于与 Linux、macOS 或 Windows 的本机互操作性提供的托管代码版本的套接字服务提供了一系列的接口来支持应用层的调用。
本文只是提供一个可运行的基本示例如果想深入了解关于TCP/IP协议的部分可自行做更深入的知识拓展。
示例的代码实现的服务端和客户端的流程如下展现了使用Socket进行一个完整的构建和通讯流程
服务器端 第一步建立一个用于通信的Socket对象 第二步使用bind绑定IP地址和端口号 第三步使用listen监听客户端 第四步使用accept中断程序直到连接上客户端 第五步接收来自客户端的请求 第六步返回客户端需要的数据 第七步如果接收到客户端已关闭连接信息就关闭服务器端
客户端 第一步建立一个用于通信的Socket对象 第二步根据指定的IP和端口connet服务器 第三步连接成功后向服务器端发送数据请求 第四步接收服务器返回的请求数据 第五步如果还需要请求数据继续发送请求 第六步如果不需要请求数据就关闭客户端并给服务器发送关闭连接信
代码实现 服务端部分
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;class Program
{static void Main(string[] args){Console.WriteLine(Socket Server);// 创建服务端Socket对象var serverSocket new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);serverSocket.Bind(new IPEndPoint(IPAddress.Parse(127.0.0.1), 9090));serverSocket.ReceiveTimeout 1000;serverSocket.SendTimeout 1000;serverSocket.Listen(1000);Console.WriteLine(服务端启动监听);var clientSocket serverSocket.Accept();Console.WriteLine(有客户端连上了);var task Task.Run(() {while (true) {var receivedMsg string.Empty;var receivedBytes new byte[1024];var bytes clientSocket.Receive(receivedBytes, receivedBytes.Length, 0);if (bytes 0){receivedMsg Encoding.UTF8.GetString(receivedBytes, 0, bytes);Console.WriteLine(收到消息: receivedMsg);}// 服务端心跳间隔Thread.Sleep(1000);}});Console.ReadLine();}
}
客户端部分
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;class Program
{static void Main(string[] args){Console.WriteLine(Socket Client);// 创建客户端Socket对象var clientSocket new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);clientSocket.ReceiveTimeout 1000;clientSocket.SendTimeout 1000;clientSocket.Connect(new IPEndPoint(IPAddress.Parse(127.0.0.1), 9090));Console.WriteLine(客户端开始连接);var task Task.Run(() {var idx 0;while (true){var sendMsg 来自客户端消息 (idx);clientSocket.Send(Encoding.UTF8.GetBytes(sendMsg));Console.WriteLine(客户端发送的数据 sendMsg);// 客户端心跳间隔Thread.Sleep(1000);}});Console.ReadLine();}
}
运行示例 总结
之前的项目中一般是用现成的成熟框架来做通讯实现本例纯粹是做个关于底层类库原理知识点的梳理关于粘包分包和多线程多频道的处理后续有时间再做深入的实践。