所谓套接字,其实就是通信端点的抽象。
而套接字编程,就是解决服务器端跟客户端之间的通信问题。
先说服务器端,简单的概括,分为四步:
1.创建套接字
int socket(int domain, int type, int protocol);
socket函数的第1个参数表示的是通信域,详情见下表
域名(宏) | 域的作用 |
AF_INET | 表示使用IPv4协议 |
AF_INET6 | 表示使用IPv6协议 |
AF_UNIX | 表示用于非网络环境的进程通信 |
AF_UNSPIC | 未制定域 |
2.将套接字跟客户端地址绑定
int bind(int sockfd, const struct sockaddr *addr, socklen_t len);
这里特别说明一下,第2个参数在实际编程中使用struct sockaddr_int *addr。因此,在第二个地址结构参数的时候需要做一个强制类型转换。
struct sockaddr_in *addr;
/* 设置地址结构 */
addr = (struct sockaddr_in*)malloc(sizeof(struct sockaddr_in));
addr->sin_family = AF_INET;
addr->sin_port = 1024;
/* 32位的IP地址,即192.168.11.6,注意应使用网络字节序进行赋值 */
addr->sin_addr = 0x60ba80c;
bind(fd,(struct sockaddr_in)addr, sizeof(struct sockaddr_in));/* 绑定地址 */
3.监听客户端的连接请求
int listen(int sockfd, int backlog);
listen函数的第1个参数用来进行连接请求监听的套接字描述符,第2个参数表示最多可以排队等待连接的请求数量。
4.接受连接请求
int accept(int sockfd, struct sockaddr *addr, socklen_t len);
accept函数的第1个参数是一个创建的套接字描述符,第2个参数是客户端的地址,第3个参数表示取得的客户端地址的大小。
现在说说客户端的实现,就只有两步:
1.第1步其实跟服务器端一样,创建一个套接字。
2.请求连接
int connect(int sockfd, const struct sockaddr *addr, socklen_t len);
想必参数都不用解释了吧。
今天不想码代码了,下次再附上一段示例代码吧。今天就写到这里了。