最后更新:2021-11-08 23:11:06 手机定位技术交流文章
在一个不同的城市 不同的街道地址
我们都同意的一项协定或标准是,及时汇编一套网络规程的网络规则。
TCP:
UDP:
HTTP:
端口号: 识别主机应用程序( 进程) 的唯一方法 。
为啥要分层:
数据链接层处理附近节点之间的网络通信。
传输水平有一个端口号码,各进程之间的通信。
两个节点(IP)之间的网络通信在网络一级处理。
Tcp 正在采取步骤,争取建立连接的可靠氟化系统服务
数据流服务(Udp)
Socket 是连接传输提供者的控点( 控点: 特定的智能指针、 单个物体的标识( 操作系统可以通过该操作系统向指定对象发送信息), 以及 Linux 系统中的网络通信和管理通过操作控点进行。
原始套接字( SOCK_ RAM) 、 当前套接字( SOCKET_ StREAM) 和数据包套接字( SOCK_ DGRAM) 是三种主要套接字类型 。
(1) 原始软件包:使程序员能够管理较低级别的网络传输程序,通过原始软件包收到的数据包括一个IP头。
(二) 流体插座:这些插座使双向、相继和可靠的数据传输成为可能,这种插座在通信前需要当事人之间的联系。
(3) 数据包旨在提供双向数据流,但不能确保数据传输的可靠性、有序性或不重复,如《联合民主党协定》所界定的那样。
例如,这三个套接字类别被用于 Socket 创建函数 :
1>如果创建的是TCP/IP协议,则应使用SOCKET_STREAM,sockfd=socket(AF_INET,SOCK_STREAM,0);
2>如果创建的是UDP协议,则应使用SOCK_DGRAM,sockfd=socket(AF_INET,SOCK_DGRAM,0);
(1)struct sockaddr
(2)struct sockaddr_in
注意:
1>sin_port所填写的端口号要设置为大雨1024的数值,因为0~1024是保留端口号(例如:110,119,120是专用的)。
2>在使用该结构体时候,sin_port、sin_addr不能直接填入数值,需要将其转化为网络字节优先顺序(即大端存放)。
(3) 网络优先字节
当数据在互联网上被传送到具有高位位元优先的网络时,如果在内部保留数据时偏爱低位位元数据,就会出现数据不一致的情况。
网络的字节顺序(NBO,网络字节顺序)和主机的字节顺序(HBO,主机网络顺序)是插座网络编程中必须理解的两个主要方面。
NBO,或网络字节顺序,是为网络数据传输而建立的一种数据格式,从高到低存储,即低的字节存储在高地址,而高的字节保存在低地址;这被称为“大端模式”。网络字节顺序消除主机字节顺序的差异。
主机字节顺序与计算机 CPU 链接,存储数据的顺序由 CPU 管理。
Linux系统在许多字节中的转换功能见下文。
(4) 结构袜子插件的应用
(5) 区分和连接 sruct sockaddr 和 sruct sockaddr_ in
共同点:
1>空间大小相同,都是16字节
2>都有family属性
3>sockaddr和sockadddr_in包含的数据都是一样的
不同点:
1>sockaddr用除family外的14个字节表示sa_data,而sockaddr_in把14个字节拆分成sin_port,sin_addr和sin_zero。分别表示端口、ip地址。sin_zero用来填充字节使sockaddr_in和sockaddr保持一样大小。
2>程序员不应操作sockaddr,sockaddr是给操作系统用的,程序员应使用sockaddr_in来表示地址,sockaddr_in区分了地址和端口,使用更方便。
使用方法:程序员将类型、ip地址和端口填充袜子ddr_ in 结构发送到 sockaddr 结构中,然后,该结构被迫传递到调用函数中作为参数。
举例:
启动通信的第一阶段,无论是TCP还是UDP,无论是作为客户还是作为服务器,都是构建一个综合系统。
(1) 函数 函数 : 此函数返回文件描述的控件, 与用于创建合成单词的文件描述相对应 。
(2)头文件:
#include<sys/types>
#include<sys/socket.h>
(3) Insocket (insocket, int Soman, int type, int 协议, int 协议) 函数原型
(4)函数参数:
1> domain,代表所使用的协议族,通常为AF_INET,表示互联网协议族(TCP/IP协议族)
2> type,指定套接字的类型:
SOCKET_STREAM( 串流集)
SOCK_DGRAM(数据集)
SOCK_ RW (第一个套接字)
3> protocol,常用的有 IPPROTO_TCP 、IPPTOTO_UDP、0,分别表示 TCP 传输协议、UDP 传输协议、自动推演。
(5) 议定书:在一般概况下,您可以建立一个包含两个参数的组合: 域名和类型。 填充为零, 操作系统将自动推动协议类型编程, 主要是填充为零。 除非有两种不同的协议支持相同的地址类型和数据传输类型。 如果我们不指明要使用哪种协议, 操作系统将无法自动移动 。
1> 参数 domain的值为AF_INET,type选择 SOCK_STREAM ,那么满足这两个条件的协议只有 TCP,所以下面两种写法是等价的:
在tcp_socket = socket = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP);//IPPROTO_TCP 是TCP协议。
在 tcp_socket = socket = socket (AF_INET, SOCK_STREAM, 0; // 0 中表示适当的协议是自动外推的 。
2> 参数 domain的值为AF_INET,type选择 SOCK_DGRAM,那么满足这两个条件的协议只有 UDP,所以下面两种写法是等价的:
6 IPPROTO-UDP指UDP议定书协定。
在 udp_ socket = socket = socket (AF_ INET, SOCK_DGRAM, 0) 中表示相关协议是自动外推的 。
(6) 结果值: 原型套接字描述符, 当生成时通常大于2, 并被后端控制套接字的函数调用 。 1: 构建失败, 返回值为 0, 1, 2, 这基本上是标准输入输出包标识符。 当用户自己构建套接字时, 就不会发生这种情况 。
当引用 Socket 函数时, Socket 执行器将构建一个 Socket,也就是说,为套接字数据结构分配存储空间。
perror 函数允许您将前一函数错误的原因导出到标准设备( stderr) 。
参数所关联的字符串先打印,然后打印错误原因字符串。此错误根据全局变量错误的值选择要输出的字符串。在库函数中,有一个错误变量,每个错误的值与以字符串形式写入的错误类型相对应。当您调用“某些”函数错误时,函数重置错误值。
使用以下示例演示潜伏函数:

粘结功能仅用于 TCP 服务器端端, 客户端不需要绑定软件包 。 在通过套接() 方法返回套接字描述符后, 在接受客户端连接请求之前, 必须绑住套接字, 即连接到机器的 IP 地址和端口, 然后可以在端口进行监听服务 。
(1)头文件:
#include <sys/types.h>
#include <sys/socket.h>
(2) 功能功能:在合成端口号上附加本地IP地址。
(3) 函数原型:内装(固定结构的袜子 * my_addr, socklen_t addren, int sockfd)
(4)函数参数:
1 sockfd 是套接字方法返回的套接字描述符 。
2 My_ addr, 包含 IP 地址和端口号的袜子ddr 指针, 通常会将袜子ddr 型号稳定地转换为袜子ddr 型号
3 adpllen, shocklen_t, 和 att 字节, 表示支架袜子的长度, 即( strockt sockaddr) 大小 ;
(5) 返回值:bind 返回 0,如果它成功;错误返回 1, 并更改错误编号, 也就是说, perror 函数可用于打印错误信息 。
连接功能被连接的客户端程序用于设置套接字和与远程服务器建立 TCP 连接。连接功能也被客户端用于其他目的。
连接函数是一个干扰功能, 通过 TCP 握手服务器结束三次连接。 客户端自动连接服务器, 通过 TCP 握手创建三次连接, 并自动告诉 Linux 内核完成 TCP 三次 。 如果连接为零, 返回值 - 1 。
客户端的连接() 函数, 其函数是客户端与服务器的积极连接, 通过三次握手来建立连接, 连接是由内核而不是由此函数建立的, 它只是通知 Linux 的内核, 让 Linux 的内核自动完成 TCP 的三次握手 。
(1)头文件:
#include <sys/types.h>
#include <sys/socket.h>
(2) 函数函数:用于连接服务器端,并连接给定套接字(通知Linux内核,允许内核在整个TCP自动握手三次)。
(3) 功能原型:在合同中(在袜子上,Const 区块袜子上, *serv_addr, inserv_addren);
(4)函数参数:
1 sockfd 是套接字方法返回的套接字描述符 。
2serv_addr, 包含远程服务器的 IP 地址和端口号
3serv_ addr, 其中包含远端服务器IP地址和端口号的引用长度, 即( strockt sockaddr) 大小
(5) 返回值: 0 表示成功, 1 表示失败,错误代码记录在错误代码中, 错误代码可以使用 Perror 函数显示 。
四. 收听模式收听模式
此函数将套接字切换为被动监听模式, 并为套接字设置一个输入数据队列, 将服务请求存储到应用程序处理 。
服务器是被动连接的。 举例来说, 一般来说, 移动客户服务( 类似于服务器) 正在等待客户的呼叫( 相当于客户) 。 在此过程中会引用监听( ) 方法 。
如果作为服务器, Listen () 用于在调用套接字 () 后监听此套接字, 捆绑 (), 如果客户端在此点调用连接 () 以提交连接请求, 服务器将接受请求 。
TCP 服务器编程中的监听功能将过程改变为服务器,并提供匹配软件包到被动连接。
(1)头文件:
#include <sys/types.h>
#include <sys/socket.h>
(2) 功能功能:将程序转换为服务器,并描述被动连接的必要设置。
(三) 功能原型:至少(锁定、背书);
(4)函数参数:
1 sockfd 是套接字方法返回的套接字描述符 。
2个积压,给内核排队长度。 对不起,csdn。 这个职位是我们特别报导的澳大利亚部分内容。 net/kongxian2007/article/ details/491553801。
(5) 返回值: 0 表示成功, 1 表示失败,错误代码记录在错误代码中, 错误代码可以使用 Perror 函数显示 。
应当指出, 监听 () 方法并不阻碍。 它所做的主要工作是建议 Linux 内核了解绑带和绑带之间的连接线长度, 然后结束监听 () 函数 。 在这种情况下, 当客户有主动连接( Contract ()) 时, Linux 内核自动完成 3 TCP 握手, 并自动存储队列中已建立的连接, 重复 。
示例:
服务器:
客户端

接受功能让服务器接收客户端的连接请求。在建立连接团队后,服务器会调用接受功能,然后在等待客户端的连接请求时睡觉。
接受 () 方法被屏蔽 : 它从已建立状态的队列中检索完成的连接( 即在三次握手后), 如果队列无法完成连接, 它会被停止, 直到队列中的用户连接从完成的连接中删除 。
(1)头文件:
#include <sys/types.h>
#include <sys/socket.h>
(2) 职能职能:用于接收客户连接请求。
(3) 功能原型:在accpt (int sockfd, const brish sockaddr * cliet_addr, intcliet_addren) ;
(4)函数参数:
1 sockfd 是套接字方法返回的套接字描述符 。
2 个客户端_ addr, 其中引用远程客户端的 IP 地址和端口号 。
3 客户端_ addr, 包含远程客户端端口号的IP地址长度和端口号的引用, 即( strockt sockaddr) 大小
(5)返回值:
1-1: 失败, 将错误代码保存在错误代码中, 错误代码可以使用 perror 函数显示 。
2 非负值:返回值是一个新的附加描述符,表示新的客户连接,可被解释为客户插座。
示例:
大小_t 在不同平台上定义不同 :
/* sparc 64 bit/
typedef unsigned long __kernel_size_t;
typedef long __kernel_ssize_t;
/sparc 32 bit */
typedef unsigned int __kernel_size_t;
typedef int __kernel_ssize_t;
将数据发送到连接的套接字中。 如果没有问题, 值等于所交付数据的全部数量; 否则, 返回 SOCKET_ ERROR 。
客户端或服务器程序是否使用发送函数将数据传输到 TCP 连接的另一端。 客户端使用发送函数向服务器发送请求, 而服务器则使用发送函数向客户端提交回复 。
(1)头文件:
#include <sys/types.h>
#include <sys/socket.h>
(2) 函数函数:将数据发送到连接的套接字。
(3) 功能原型: size_ t( int sockfd, const volution *buf, size_ t len, int 旗);
(4)函数参数:
1 sockfd 是套接字方法返回的套接字描述符 。
2 const-volution *buf, 指待发数据
3 个圆, 数据长度( 字节)
4, 0 的 4 国旗, 0 : 一般而言, 与 写( ) 没有区别, 异常情况为 0
MSG_DONTROUT:通知内核,目的地主机在本地网络上,没有检查路线。
MSG_DONTWAIT:为单个I/O操作启用非阻塞模式。
MSG_OB:该代码表示该电文是与外部电文一起发送的。
(5)返回值:
1-1: 失败, 将错误代码保存在错误代码中, 错误代码可以使用 perror 函数显示 。
2 是 0 以上, 并重新发送实际发送的字节数 。
注意 : Send 函数返回实际传输的字节, 这可能比用户想要发送的数据要少。 在应用程序中, Send 函数返回值应该与您要发送的字节编号( len) 比较, 当 Send 函数返回值和 len 长度不一致时应该解决这个问题 。
校正功能被客户端和服务器应用程序用于接收 TCP 连接另一端的数据。
(1)头文件:
#include <sys/types.h>
#include <sys/socket.h>
(2) 功能功能:从TCP连接的对面接收数据。
sessage_t reciv( int sockfd, const volution *bff, size_ t nbites, int 旗) 是一个函数原型 。
(4)函数参数:
1 sockfd 是套接字方法返回的套接字描述符 。
2个混为一谈的缓冲地带*buf,指数据接收缓冲地带
3个Len,缓冲区长度,以及通常较大的缓冲区长度规格,避免了数据接收过度和数据遗漏。
④ flag,
0:与读()相同,但“阅读”功能读取缓冲区的数据时,缓冲区的数据被删除,不调出缩略语。
MSG_DONTWAIT:为单个I/O操作启用非阻塞模式。
MSG_OB:该代码表示该电文是与外部电文一起发送的。
MSG_PEEK:可视信息可查看,在收到数据时不会删除。
MSG_WAITALL: 通知延迟到读取所需数据字节时。
(5)返回值:
1-1: 失败, 将错误代码保存在错误代码中, 错误代码可以使用 perror 函数显示 。
2大于0,代表收到的字节数。
转发接收分为两种情况:客户和服务器。
当数据操作完成后,可使用关闭()方法释放字符串,从而阻止软件包上的所有进一步数据操作。
(1)头文件:#include <unistd.h>
(2) 功能原型:内嵌(在袜子上);
(3) 功能参数:袜子,待释放的包件描述符
函数也关闭套接字,但与关闭不同,它只允许以一种方式停止数据传输,而在另一个方向继续数据传输。
(1)头文件:#include <sys/socket.h>
(2) 功能原型:在关闭时(在袜子上,如何)
(3)函数参数:
1 shockfd, 将关闭的套接字描述符
2 在结束业务方面,可作出以下选择:
0:不允许继续接收数据。
2: 不允许无限期发送数据。
2: 不允许无限期发送和接收数据。
若上述行动未经批准,您可直接援引关闭功能。
(4) 返回0值表示成功,1值表示失败,并设定匹配误差数字。
Socket. Create ()
设置两个服务器的袜子结构
三. Bind 软件包
四. 监听模式, 用 Linux 内核进行三次握手 ()
调用客户端_fd = 存取 () 五次 。
第六,接收客户数据,客户端_fd=接受(Sockfd, NULL, NULL)。
向客户端发送信件 (发送 (client_ fd, sendbuf, sentbuf, stren (sendbuf, 0))
Socket. Create ()
二. 连接, 填入服务器的套接字机结构 。
三. 活动服务端链接、呼叫连接()
使用发送( sockfd, buf, strlen(buf), 0) 向服务器发送信件 。
接收服务器信息( sockfd, buff, BUFFER_SIZE, 0) 。
运行结果:
启动服务器端端, 然后客户端, 然后客户端输入服务器的 IP 地址( 注意有我虚拟机器的 IP 地址, 使用 ifcong 命令) 和端口号, 当您返回到车辆时, 输入一个字符串, 输入到服务器, 点到车辆, 成功发送后, 服务器将对收到的数据信息作出反应, 显示接收成功 。
对不起, Csdn。 我不确定我能做到这一点, 但我无法做到这一点。
本文由 在线网速测试 整理编辑,转载请注明出处。