Socket网络编程

By admin on 9月 17, 2022

流程图如下所示:

\u200b我们从服务器端开始说起。

传输层的底一层的服务提供给socket抽象层,socket抽象层再提供给应用层。

缺点:仅限于同一台计算机或同一局域网内部。

\\————————-前期工作———————-服务器工作流程:1.建立socket对象,指定通信协议(TCP)2.socket对象和ip地址端口(prot)进行bind绑定3.监听操作(=》读写)客户端的工作流程:1.建立socket对象,指定通信协议(TCP)2.指定ip地址,端口,建立连接connect()3.客户端发送连接请求4.read等待服务器的应答(接受我连接请求申请)\\————————-信息交互工作———————-双方通信\\—————————-收工工作————————-关闭socket,断开连接!在这里插入图片描述(https://img-blog.csdnimg.cn/20200613183727799.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2wxMjA2NzE1ODc3,size_16,color_FFFFFF,t_70)2、365体育官方版解析2.1、编写代码的流程1.创建套接字2.绑定bind3.监听listen4.接受accept5.和客户端交互数据readwrite2.2、创建套接字*头文件:includeinclude*函数:intsocket(intdomain,inttype,intprotocol);2.3、绑定bind在解释绑定之前要先解释一下sockaddr数据结构和sockaddr_in数据结构。

但是当发送的数据包(有效载荷)大小较小时,就会因为发送次数的增加造成发送端和接收端的资源开销,如系统调度、硬件设备等。

s.setblocking(flag)|如果flag为0,则将套接字设为非阻塞模式,否则将套接字设为阻塞模式(默认值。

更为复杂的需要自己继续深入。

调用前,参数addr指向一个初始值为空的地址结构,而addrlen的初始值为0;调用accept后,服务器等待从编号为s的套接字上接受客户连接请求,而连接请求是由客户方的connect调用发出的。

我们对Go语言中TLS通信的实现过程进行了研究分析。

socket类型|描述—|—socket.AF_UNIX|只能够用于单一的Unix系统进程间通信socket.AF_INET|服务器之间网络通信socket.AF_INET6|IPv6socket.SOCK_STREAM|流式socket,forTCPsocket.SOCK_DGRAM|数据报式socket,forUDPsocket.SOCK_RAW|原始套接字,普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以;其次,SOCK_RAW也可以处理特殊的IPv4报文;此外,利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP头。

个套接字接口构成一个连接的一端,而一个连接可完全由一对套接字接口规定。

SocketType:类型,常用的类型有Stream、Dgram、Raw。

这主要是因为EAP模式不支持SSL/TLS方式的安全传输,不过这样做也不好,如果实现方式不好会降低效率(业务层面,不影响Socket。

**监听连接──listen**此调用用于面向连接服务器,表明它愿意接收连接。

但在网络环境下,各主机独立分配的进程号不能唯一标识该进程。

它们都替你封装好了,例如java里的netty,golang里的net包,C++里的SogouWorkflow。

通常是一个元组(ipaddr,port)s.setsockopt(level,optname,value)|设置给定套接字选项的值。

内设流量控制,避免数据流超限;数据被看作是字节流,无长度限制。

其实System.Text.Encoding对象下还提供了BigEndianUnicode.GetBytes方法。

accept的调用格式如下:SOCKETPASCALFARaccept(SOCKETs,structsockaddrFAR*addr,intFAR*addrlen);参数s为本地套接字描述符,在用做accept调用的参数前应该先调用过listen。

、IP转换函数(其二)includeuint32_thtonl(uint32_thostlong);uint16_thtons(uint16_thostshort);uint32_tntohl(uint32_tnetlong);uint16_tntohs(uint16_tnetshort);上面的函数中h表示host,n表示network,l表示32位长整数,s表示16位短整数。

发表回复

您的电子邮箱地址不会被公开。