初学LinuxTCP服务端

来源:互联网 发布:2k17加内特捏脸数据 编辑:程序博客网 时间:2024/04/23 21:28
#include <stdio.h>#include <stdlib.h>#include <strings.h>#include <sys/types.h>#include <sys/socket.h>#include <memory.h>#include <unistd.h>#include <netinet/in.h>#include <arpa/inet.h>#include <signal.h>#define PORT    11910   //定义通信端口#define BACKLOG 3       //定义侦听队列长度#define buflen  1024int ss,sc;int main(int argc,char *argv[]){int err;struct sockaddr_in server_addr; //存储服务器端socket地址结构struct sockaddr_in client_addr; //存储客户端 socket地址结构ss = socket(AF_INET,SOCK_STREAM,0); //建立一个序列化的,可靠的,双向连接的的字节流memset(&server_addr,0,sizeof(server_addr));server_addr.sin_family = AF_INET;           //协议族server_addr.sin_addr.s_addr = htonl(INADDR_ANY);   //本地地址server_addr.sin_port = htons(PORT);int opt=1;setsockopt(ss,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(&opt));//自动释放端口err = bind(ss,(struct sockaddr *)&server_addr,sizeof(sockaddr));if(err<0){printf("server : bind error\n");return -1;}err = listen(ss,BACKLOG);   //设置监听的队列大小if(err < 0){printf("server : listen error\n");return -1;}for(;;){socklen_t addrlen = sizeof(client_addr);sc = accept(ss,(struct sockaddr *)&client_addr,&addrlen);  //注,此处为了获取返回值使用 指针做参数if(sc < 0)  //出错{continue;   //结束此次循环}else{printf("connected\n");}//char wbuffer[buflen];char rbuffer[buflen];for(;;){close(ss);//等待读int size;memset(rbuffer,0,buflen);for(size = 0;size == 0 ;size = read(sc,rbuffer,buflen));printf("%s\n",rbuffer);write(sc,rbuffer,strlen(rbuffer)+1);if(strcmp(rbuffer,"quit") == 0)            {close(sc);   //成功返回0,失败返回-1                return 0;            }}}}

原创粉丝点击