Socket网络通讯入门(一)
提示能力有限不足以及错误之处还请指出文章目录前言一、 计算机网络 OSI、TCP/IP、五层协议 体系结构1.OSI七层模型每层的作用2.TCP/IP协议分成3.五层协议体系结构二、Socket服务端和客户端 简单通信1.服务端代码2.客户端总结前言简单学习了解一下Socket网络通讯入门。提示以下是本篇文章正文内容下面仅供参考一、 计算机网络 OSI、TCP/IP、五层协议 体系结构如果记得没错高中就学习了这些基础的东西现在重新系统复习一下。为什么会有这些体系分层简单来说就是1.可以将复杂的问题划分为若干容易处理的问题有点算法分治法的感觉。2.灵活性好3.方便管理排错下图是对应关系1.OSI七层模型每层的作用七层模型应用层Application、表示层Presentation、会话层Session、传输层Transport、网络层Network、数据链路层Data Link、物理层Physical物理层物理层是OSI模型的最低层负责传输原始比特流通过物理媒介进行数据的实际传输。它包括定义电气、机械、程序及功能标准如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。这一层的数据叫做比特。数据链路层数据链路层确保无差错的数据在相邻节点之间传输提供访问媒体的方法并执行错误检测和修正。这一层的主要任务是将物理层传输的比特流组合成帧并添加一些用于错误检测和控制的字段。网络层网络层负责在多个网络中选择和管理数据包的路由。它处理数据包从源到目的地的传输和路由选择主要的协议包括IPInternet Protocol, 互联网协议和ICMPInternet Control Message Protocol, 互联网控制消息协议等。传输层传输层提供端到端的通信服务确保数据有效、稳定地传输。它提供端到端的通信控制如流量控制、分段、错误检测和重发等主要的协议包括TCPTransmission Control Protocol, 传输控制协议和UDPUser Datagram Protocol, 用户数据报协议。会话层会话层负责建立和管理通信会话。它用于建立和维护通信会话如远程过程调用协议RPC和结构化查询语言SQL等。表示层表示层处理数据表示方式确保一个系统发送的信息能被另一个系统识别和理解。它负责数据格式转换、数据加密和解密如JPEG、PNG等。应用层应用层为应用软件提供网络服务接口直接支持各种应用和最终用户的网络服务如HTTP、FTP、SMTP等。它是OSI参考模型中的最高层直接面向用户。每一层都有自己的职责和功能通过相互协作实现了数据的传输和处理。2.TCP/IP协议分成应用层应用层是TCP/IP协议的第一层是直接为应用进程提供服务的。1对不同种类的应用程序它们会根据自己的需要来使用应用层的不同协议邮件传输应用使用了SMTP协议、万维网应用使用了HTTP协议、远程登录服务应用使用了有TELNET协议。2应用层还能加密、解密、格式化数据。3应用层可以建立或解除与其他节点的联系这样可以充分节省网络资源。传输层作为TCP/IP协议的第二层传输层在整个TCP/IP协议中起到了中流砥柱的作用。且在传输层中TCP和UDP也同样起到了中流砥柱的作用。 传输的是TCP信息包括TCP头信息。TCP头包含:源和目的主机的端口号顺序号确认号校验字。网络层网络层在TCP/IP协议中的位于第三层。在TCP/IP协议中网络层可以进行网络连接的建立和终止以及IP地址的寻找等功能。 传输的是网络数据报包括ip报头TCP信息。 ip报头包括源和目的主机的IP地址类型和生命期等。网络接口层在TCP/IP协议中网络接口层位于第四层。由于网络接口层兼并了物理层和数据链路层所以网络接口层既是传输数据的物理媒介也可以为网络层提供一条准确无误的线路。 传输的是数据帧。包括帧头IP数据报帧尾。 帧头中是源和目的MAC地址类型。 帧尾是校验字。3.五层协议体系结构应用层确定进程之间通信的性质以满足用户的需要传输层负责主机中两个进程之间的通信网络层负责为分组交换网上的不同主机提供通信数据链路层提供无差错帧传送物理层透明的经实际电路传送比特流。二、Socket服务端和客户端 简单通信根据通信流程来创建1.服务端代码先启动服务端编辑消息用的是Console.ReadLine();usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Net.Sockets;usingSystem.Net;namespaceConsoleApp2{classProgram{staticvoidMain(string[]args){//创建ScoketSocketsocketServernewSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.IP);//绑定端口IPEndPointiPEndPointnewIPEndPoint(IPAddress.Parse(127.0.0.1),8888);socketServer.Bind(iPEndPoint);//监听socketServer.Listen(0);Console.WriteLine(服务端启动成功);//循环等待客户端连接SocketconnetClientsocketServer.Accept();Console.WriteLine(客户端连接((IPEndPoint)connetClient.RemoteEndPoint));//接收客户端 消息byte[]bynewbyte[1024];connetClient.Receive(by);stringbystrEncoding.UTF8.GetString(by);Console.WriteLine(接收到客户端信息bystr);stringstrConsole.ReadLine();byte[]strbyteEncoding.UTF8.GetBytes(str);connetClient.Send(strbyte);}}}2.客户端usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Net.Sockets;usingSystem.Text;usingSystem.Threading.Tasks;namespaceConsoleApp1{classProgram{staticvoidMain(string[]args){//客户端 创建SocketSocketsocketClientnewSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.IP);//连接socketClient.Connect(127.0.0.1,8888);stringstrConsole.ReadLine();byte[]strbyteEncoding.UTF8.GetBytes(str);socketClient.Send(strbyte);//接收客户端 消息byte[]bynewbyte[1024];socketClient.Receive(by);stringbystrEncoding.UTF8.GetString(by);Console.WriteLine(接收到服务端信息bystr);}}}总结上面服务端和客户端的代码只是用于简单交互示列正式使用不会如此写法因为阻塞性太大正常使用会异步处理。