1 一对多模型,TCP的编程步骤
服务端:
1、socket()获得一个sockfd。注意第二个参数必须SOCK_STREAM.
2、准备通信地址(必须服务器的)
3、bind()绑定。(开放了端口,允许客户端连接)
4、监听客户端 listen()函数
5、等待客户端的连接 accept(),返回用于交互的socket描述符
6、使用第5步返回sockt描述符,进行读写通信。
7、关闭sockfd。
客户端:
客户端的代码与一对一的一样。注意第二个参数必须SOCK_STREAM.
TCP一对多模型,有两类描述符:
第一步的描述符不再参与信息交互,只是等待客户端的连接(accept),accept()在客户端连接上来后,会返回一个新的描述符,用于读写通信。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<unistd.h>
int main(){
int sockfd = socket(AF_INET,SOCK_STREAM,0);
if (sockfd == -1){
perror("socket"),exit(-1);
}
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(2222);
addr.sin_addr.s_addr = inet_addr("192.168.66.11");
int res = bind(sockfd,(struct sockaddr*)&addr,
sizeof(addr));
if (res == -1){
perror("bind"),exit(-1);
}
printf("bind ok\n");
listen(sockfd,100);//监听
struct sockaddr_in client;
socklen_t len = sizeof(client);
int fd = accept(sockfd,(struct sockaddr*)&client,&len);
char *from = inet_ntoa(client.sin_addr);//十