1 #include<sys/types.h> 2 #include<sys/socket.h> 3 #include<netinet/in.h> 4 #include<arpa/inet.h> 5 #include<unistd.h> 6 #include<string.h> 7 #include<stdlib.h> 8 #include<stdio.h> 9 #define PORT 2345 10 11 int main(void) 12 { 13 int sockfd,newsockfd; 14 struct sockaddr_in addr; 15 int addr_len=sizeof(struct sockaddr_in); 16 if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0) 17 { 18 perror("socket created error!"); 19 exit(1); 20 } 21 else 22 { 23 printf("socket created successfully!\nsocket id:%d\n",sockfd); 24 } 25 26 bzero(&addr,sizeof(struct sockaddr_in)); 27 addr.sin_family=AF_INET; 28 addr.sin_port=htons(PORT); 29 addr.sin_addr.s_addr=htonl(INADDR_ANY); 30 if(bind(sockfd,(struct sockaddr *)(&addr),sizeof(struct sockaddr))<0) 31 { 32 perror("bind error!"); 33 exit(1); 34 } 35 else 36 { 37 printf("bind port successfully!\nlocal port:%d\n",PORT); 38 } 39
1 /* 2 listen函数 3 4 头文件 5 #include<sys/socket.h> 6 int listen(int sockfd,int backlog); 7 8 9 参数 10 sockfd 是 已经建立的套接口 11 backlog 是同时处理的最大连接的请求数目 12 13 14 函数返回值: 15 若成功返回0 若失败返回-1 16 17 */
40 if(listen(sockfd,5)<0) 41 { 42 perror("listen error!"); 43 exit(1); 44 } 45 else 46 { 47 printf("listening ........\n"); 48 } 49
/* 接收连接函数accept 头文件及函数原型 #include<sys/types.h> #include<sys/socket.h> int accept(int sockfd,struct sockaddr *addr,socketlen_t *addrlen); 参数含义: sockfd 处于监听状态的socket addr 是一个sockaddr结构体类型的指针,系统会把远程主机的信息保存到这个指针所指向的结构体中, addrlen是sockaddr的内存长度,可以用sizeof函数来取得 函数的返回值:若成功,返回新的套接口的的描述符,若失败,返回-1 当accept函数接收到一个连接时,会返回一个新的socket标识符,以后的数据传输与读取就是通过这个新的socket编号来处理的,原来参数中的socket也可以继续使用。接受连接后,远程主机的地址和端口信息就会保存到addr所指向的结构体中 */
50 if((newsockfd=accept(sockfd,(struct sockaddr *)(&addr),&addr_len))<0) 51 { 52 perror("accept error!"); 53 } 54 else 55 { 56 printf("accepted a new connecttion.\nnew socket id:%d\n",newsockfd); 57 } 58 59 return 0; 60 }
程序运行结果:
1 socket created successfully! 2 socket id:3 3 bind port successfully! 4 local port:2345 5 listening ........ // 程序运行到这里会一直等待,说明本地计算机的2345端口处于正在监听的状态。此时打开浏览器,输入 http://本机IP:2345/ 回车 表明已经接受了连接,并且创建了新的套接字 6 accepted a new connecttion. 7 new socket id:4
时间: 2024-11-08 20:15:18