- 论坛徽章:
- 0
|
同学写的程序,没有注释,加一份有简单注释的- #include <stdio.h>
- #include <string.h>
- #include <unistd.h>
- #include <stdlib.h>
- #include <sys/types.h>
- #include <netinet/in.h>
- #include <arpa/inet.h>
- #include <sys/socket.h>
- #define PORT 51000
- #define MAXSIZE 512
- int main(){
- struct sockaddr_in server;
- struct sockaddr_in client;
- int listenfd,connectfd;
- char buf[MAXSIZE];
- //设置套接字
- if(-1==(listenfd=socket(AF_INET,SOCK_STREAM,0))){
- perror("socket error\n");
- exit(1);
- }
- int opt=SO_REUSEADDR;
- setsockopt(listenfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));
- bzero(&server,sizeof(server));
- server.sin_family=AF_INET;
- server.sin_port=htons(PORT);
- server.sin_addr.s_addr=htonl(INADDR_ANY);
- //绑定端口
- if(-1 == bind(listenfd,(struct sockaddr*)&server,sizeof(server))){
- perror("bind error\n");
- exit(1);
- }
- //监听端口
- if(-1 == listen(listenfd,5)){
- perror("listen error\n");
- exit(1);
- }
- socklen_t len=sizeof(client);
- pid_t pid;
- while(1){
- //处理客户端请求
- if(-1==(connectfd=accept(listenfd,(struct sockaddr *)&client,&len))){
- perror("accept error\n");
- exit(1);
- }
- if(-1==(pid=fork())){
- perror("fork error\n");
- exit(1);
- }
- else if (pid == 0){
- close(listenfd);
- memset(buf,0,sizeof(buf));
- int slen=0;
- while(1){
- memset(buf,0,sizeof(buf));
- //接收客户端发送过来的字符串并显示出来
- slen=recv(connectfd,buf,sizeof(buf),0);
- if(0>slen){
- perror("recv error\n");
- exit(1);
- }
- buf[slen]='\0';
- printf("%s\n",buf);
- //printf("%s",buf); //不能接收到马上输出
- if(0==strcmp(buf,"bye"))
- break;
- }
- close(connectfd);
- exit(0);
- }
- else
- close(connectfd);
- }
- close(listenfd);
- return 0;
- }
复制代码 |
|