最后更新:2022-06-28 11:59:20 手机定位技术交流文章
要建立一个tcp连接,需要执行一个服务器角色的单端进程:
socket()系统要求一个新的插座(只创建局域的tcp插座并不能形成连接);它包含serv_addr结构内部的IP和端口信息。
listen()系统调用监听连接accept()系统调用接收连接这里是newsockfdaccept()
当服务器监控连接请求时,它使用这个新生成的接口来与远程客户端的接口进行通信。
server.c核心代码(多进程版本,每个进程处理一个客户端连接)
server.c这是tcp服务器的多进程版本。如果有新的请求,请使用fork()系统调用生成处理连接请求的新进程:
事实上,您也可以使用多个线程来处理请求。pthread_create()
请调用并生成一个新的线程。
事实上,处理多个请求的最有效的方法是使用系统epoll
通过事件通知机制进行处理请求的非封锁。
为创建tcp连接,tcp客户端会执行以下操作:
在所有类似Unix的系统中,由进程生成的索克由索克文件代表,并通过阅读和写入内容将消息传递给索克文件。
在Linux中,插座文件通常位于 /proc/pid/fd 下。 通过上面的 server.c 和 client.c 练习并浏览相应的插座文件。
预编译 server.c和 client.c
在30,00个本地端口上运行:
server 30000
用lsof或netstat检查服务器进程ID
根据pid(17009),浏览目录/proc/17009/fd,查看:
索克:[1293853508]是索克文件。
运行客户端并连接到服务器。
client localhost 30000
不要先发送消息,保持连接。 然后通过lsof命令查看30,00个端口:
查看图中的NAME列
上面提到的接口是互联网域名接口,用于不同主机之间的进程的通信。在Unix中,机器之间的进程通信通常使用另一个接口(Unix域接口)。新的Unix域接口连接和互联网域接口连接几乎相同。唯一的区别是,当索克()系统调用时,输入索克类型是不同的。
注意上面的AF_UNIX和AF_INET之间的区别。
Unix插座服务器程序userver.c
Unix接口客户端程序uclient.c
编译:
gcc userver.c -o userver
gcc uclientj.c -o uclient
服务器接收了一个创建索克文件的参数,该参数是索克文件的名称,例如,使用/tmp/usfd作为索克文件。
userver /tmp/usfd
检查新制作的插座文件:
ls -l /tmp/usfd
该文件的模式字符串中的第一个字符表示它是一个插座文件。
来源链接: https://blog.csdn.bdss58/article/details/77929685
本文由 在线网速测试 整理编辑,转载请注明出处。