[原创]Linux下的网络编程(一) tcp套接字 |
实例说明:
1 #include <stdio.h> /*标准函数库*/
2 #include <stdlib.h> /*exit(1)函数*/
3 #include <unistd.h>
4 #include <sys/types.h>
5 #include <sys/socket.h>
6 #include <netinet/in.h>
7 #include <arpa/inet.h>
8 #include <string.h>
9 #define PORT 1234 /*定义端口号*/
10 #define BACKLOG 1 /*设定最大联接数目*/
11 main() /*主程序开始*/
12 {
13 int listenfd,connectfd; /*套接字描述符,一个是监听套接字.一个 是联接套接字*/
14 struct sockaddr_in server; /*服务器地址信息(INET协议簇地址结构*/
15 struct sockaddr_in client; /*客户端地址信息*/
16 socklent_t sin_size; /* _socklen_t类型*/
17 if(listenfd = socket(AF_INET,SOCK_STREAM,0))==-1)
{
18 perror("Create socket failed.");
19 exit(1);
}
/*创建套接字*/
20 int opt=SO_REUSEADDR;
21 setsockopt(listenfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));/*将套接字设成地址可重用方式*/
22 bzero(&server,sizeof(server));/*将地址簇结构清零*/
23 server.sin_family=AF_INET;/*协议类型*/
24 server.sin_port=htons(PORT);/*端口.htons是host to net string*/
25 server.sin_addr.s_addr=htonl(INADDR_ANY);/*地址,自动设成本机可用地址*/
26 if(bind(listenfd,(struct sockaddr*)&server,sizeof(struct sockaddr))==-1)
{
27 perror("Bind error");
28 exit(1);
}
/*绑定服务器*/
29 if(listen(listenfd,BACKLOG)==-1)
{
30 perror("listen() error\n");
31 exit(1);
}
/*监听服务器*/
32 sin_size=sizeof(struct sockaddr_in);
33 if((connectfd=accept(listenfd,(struct sockaddr *)&client,&sin_size))==-1)
{
34 perror("accept() error\n")
35 exit(1);
}
/*接受客户联接,并创建联接套接字*/
36 printf("You got a connection from %s\n",inet_ntoa(client.sin_addr);
37 send(connectfd,"wellcome to my server.\n",22,0);/*发送信息*/
38 close(connectfd);/*关闭联接套接字*/
39 close(listenfd); /*关闭监听套接字*/
}
这时一个最简单的服务器程序,完成的功能就是接受客户端联接请求并发送字符"wellcome to my server".这也可以看成是个服务器程序模板. |
|
|