lisn_acp.c

 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

lisn_acp.c的相关文章