最后更新:2022-07-02 14:05:06 手机定位技术交流文章
在网络编程中创建接受连接请求的接口的过程:
步骤1:调用插座函数创建插座;
第一步:调用绑函数分配IP地址和端口号码;
步骤3:调用听函数到接收请求状态;
步骤4:调用接受函数接受连接请求。
hhead文件中, typedef声明通常定义为适应系统和年龄变化,例如过去16位操作系统年龄,其中int类型为16位,
文件描述符:0,1,2分配给标准输入输出和标准错误
WSA(Windows Sockets Asynchronous)
int socket(int domain, int type, int protocol) // protocol family (PF, protocol family), mode of transmission, protocol//Windows returns the SOCKET handle
SOCK_STREAM,SOCK_DGRAM(数据图):数据边界的存在意味着接收器的数目与发送器的数目相同
顺序和网络字符串
ox 12345678 --2种:大 0x12 0x34 0x56 0x78;小则相反
网络字节顺序定义为通过网络传输数据的统一方式.
htons(h,to,n,s)同步(从主机转换短数据到网络)
inet_aton函数和inet_addr函数两个形式字符串(点..) IP地址转换为32位网络字节序列整数,并返回。 inet_aton自动在in_addr结构变量中填充转换的IP地址信息
INADDR_ANY可以自动获取运行服务器的计算机的IP地址,如果只有一个NIC匹配,是循环地址,指的是计算机自己的IP地址
客户端的IP地址和端口在调用连接函数时自动分配,不需要调用绑函数。
ACK号 -> SEQ(sequence)号 + 传递的字节数 + 1
不需要调用在TCP连接中调用的听和接受函数,UDP只创建一个接口和数据交换过程。
在调用O函数时自动分配IP和端口号码;在UDP通信中保持I/O函数所作的调用数目一致。
对UDP接口来说,调用连接函数并不意味着与其他UDP接口进行连接,它只是将目标IP和端口信息注册到UDP接口上。
int shutdown (int sock, int howto); p124
DNS(Domain Name System)
当服务器终止连接时,插座字段处于时间等待过程中,并使用相应的端口,因此重新启动,绑定函数调用过程,客户端在每次运行程序时动态分配端口数
SO_REUSEADDR的默认值为0(错误),这意味着在Time_wait状态下不能将接口号重新分配给新的接口。 用setsockopt函数替换1
CPU内核的数目与同时运行的进程的数目相同,相反,如果进程的数目超过内核的数目,则该进程将按时间顺序使用CPU资源。
父进程应将子进程的输出参数值或返回语句的返回值传递给创建子进程的父进程,父母应负责带回自己的子女;为了摧毁子进程,父进程应主动请求获取子进程的返回值。
信号和信号函数P168
叉函数复制文件描述符,其中父进程将两个接口(一个是服务器端接口,另一个是客户端连接接口)复制到子进程。
I/O程序分开的意义p180
进程具有完全独立的内存结构,甚至由叉函数创建的子进程也不与母进程共享内存空间
数据进入管道后无法掌握
提供服务给多个客户,无需创建新的流程“教师学生一对一对一对多个手”
数据接收器通过调用一个通用输入函数读取数据的剩余部分,除了前面的紧急指示器之一
如果设置MSG_PEEK选项并调用 therecv函数,输入缓冲数据即使被读取也不会被删除。
readv & writev 函数
"Windows没有像Linux一样的信号处理机制"sigaction / select p225
即使在不同的网络中,多播也可以通过加入多播组接收数据,相反,广播只能向同一网络的主机发送数据。
使用标准I/O函数时额外的缓冲支持

在条件触发模式中,只要缓冲输入有数据,事件模式将重新注册
EPOLLET:通过边缘触发器通知事件
创建和更改一个线程的上下文比创建和更改一个过程的上下文更快
不需要特殊的技术来进行数据交换
堆栈区域、共享数据区域和堆栈的线性隔离
当一个线程访问一个变数时,它应该防止其他线程访问同步
一个由多个句子组成的代码块,当在一个函数中同时运行多个线程时会引起问题。
相互排斥
pthread_mutex_init() & pthread_mutex_destroy(); //p300
pthread_mutex_lock() & pthread_mutex_unlock();
sem_init() & sem_destroy(); sem_post() & sem_wait(); //p304
"Windows线程在第一个调用线程主函数返回时被摧毁(摧毁时间点和方法与Linux不同)。
因此,终止状态也被称作“信号状态”(boolean TRUE)和非终止状态被称作“非信号状态”(FALSE)。

典型的内核模式同步方法包括基于事件、信号数量和互斥的内核对象的同步
异步输入/输出意味着输入/输出函数的返回时间与数据接收完成时间不一致
非同步模式可以比同步模式更有效地使用CPU。指定监控对象后,您可以离开完成其他任务,然后返回验证状态的变化。



Gather/Scatter I/O是指在多个缓冲器中某程度积累的数据的一次传输(Gather output),以及接收的数据的局部存储(Scatter input)。
有两种方法来确认I/O完成并通过重叠I/O取得结果。
WSASend和WSARecv函数的第六参数基于事件对象。
当I/O完成时,由WSAOVERLAPPED结构变量引用的事件对象将转换为信号状态。
为了验证I/O的完成和完成,称为WSAGetOverlappedResult函数。
WSASend和WSARecv函数的第七参数是基于完成程序的。//p367
void CALLBAC
K 完成ROUTINE();//p370 返回值类型空后插入的CALLBACK键与主函数WINAPI中声明的键相同,所有用于声明函数的调用规格,因此,在定义完成常规时必须添加。
输入输出完成端口(IOCP)
完成端口(CP对象)

非阻力类型的实现


网络编程 Tcp/Ip协议_bilibili
C/S B/S
TCP/IP

UDP
TCP

ipconfig(配置--配置)
ping vault IP地址


索克:包含IP地址和端口号码的网络单元
客户端:

服务器端:

本文由 在线网速测试 整理编辑,转载请注明出处。