(本文章内容来源于网络,仅供学习之用,别无二心,希望不要有纠纷,谢谢!)
基于 TCP 的套接字编程的所有客户端和服务器端都是从调用socket 开始,它返回一个套接字描述符。客户端随后调用connect 函数,服务器端则调用 bind、listen 和accept 函数。
TCP套接字编程流程
服务器:
1.创建套接字描述符(socket)
2.设置服务器的IP地址和端口号(需要转换为网络字节序的格式)
3.将套接字描述符绑定到服务器地址(bind)
4.将套接字描述符设置为监听套接字描述符(listen),等待来自客户端的连接请求,监听套接字维护未完成连接队列和已完成连接队列
5.从已完成连接队列中取得队首项,返回新的已连接套接字描述符(accept),如果已完成连接队列为空,则会阻塞
6.从已连接套接字描述符读取来自客户端的请求(read)
7.向已连接套接字描述符写入应答(write)
8.关闭已连接套接字描述符(close),回到第5步等待下一个客户端的连接请求
客户端:
1.创建套接字描述符(socket)
2.设置服务器的IP地址和端口号(需要转换为网络字节序的格式)
3.请求建立到服务器的TCP连接并阻塞,直到连接成功建立(connect)
4.向套接字描述符写入请求(write)
5.从套接字描述符读取来自服务器的应答(read)
6.关闭套接字描述符(close)
UDP套接字编程流程
服务器:
1.创建套接字描述符(socket)
2.设置服务器的IP地址和端口号(需要转换为网络字节序的格式)
3.将套接字描述符绑定到服务器地址(bind)
4.从套接字描述符读取来自客户端的请求并取得客户端的地址(recvfrom)
5.向套接字描述符写入应答并发送给客户端(sendto)
6.回到第4步等待读取下一个来自客户端的请求
客户端:
1.创建套接字描述符(socket)
2.设置服务器的IP地址和端口号(需要转换为网络字节序的格式)
3.向套接字描述符写入请求并发送给服务器(sendto)
4.从套接字描述符读取来自服务器的应答(recvfrom)
5.关闭套接字描述符(close)
基于 TCP 的套接字编程的所有客户端和服务器端都是从调用socket 开始,它返回一个套接字描述符。客户端随后调用connect 函数,服务器端则调用 bind、listen 和accept 函数。套接字通常使用标准的close 函数关闭,但是也可以使用 shutdown 函数关闭套接字。下面针对套接字编程实现过程中所调用的函数进程分析。以下是基于 TCP 套接字编程的流程图:
socket 函数
套接字是通信端点的抽象,实现端对端之间的通信。与应用程序要使用文件描述符访问文件一样,访问套接字需要套接字描述符。任何套接字编程都必须调用socket 函数获得套接字描述符,这样才能对套接字进行操作。以下是该函数的描述:
1. /* 套接字 */
2.
3. /*
4. * 函数功能:创建套接字描述符;
5. * 返回值:若成功则返回套接字非负描述符,若出错返回-1;
6. * 函数原型:
7. */
8. #include <sys/socket.h>
9.
10.int socket(int family, int type, int protocol);
11./*
12. * 说明:
13. * socket类似与open对普通文件操作一样,都是返回描述符,后续的操作都是基于该描述符;
14. * family 表示套接字的通信域,不同的取值决定了socket的地址类型,其一般取值如下:
15. * (1)AF_INET IPv4因特网域
16. * (2)AF_INET6 IPv6因特网域
17. * (3)AF_UNIX Unix域
18. * (4)AF_ROUTE 路由套接字
19. * (5)AF_KEY 密钥套接字
20. * (6)AF_UNSPEC 未指定
21. *
22. * type确定socket的类型,常用类型如下:
23. * (1)SOCK_STREAM 有序、可靠、双向的面向连接字节流套接字
24. * (2)SOCK_DGRAM 长度固定的、无连接的不可靠数据报套接字
25. * (3)SOCK_RAW &nb

本文详细介绍了基于TCP/IP的套接字编程流程,包括服务器端的创建套接字、绑定地址、监听、接受连接以及读写数据,以及客户端的创建套接字、连接服务器、读写数据和关闭连接。此外,还提到了UDP套接字编程的类似流程。重点阐述了TCP套接字编程中涉及的关键函数,如socket、connect、bind、listen、accept等,以及并发服务器的概念和关闭套接字的方法。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



