Linux Tcp通信——服务器与客户端

#include 

#include 


#include #include #include #include #include #include #include

#define SERVERPORT 8000 #define MAXLIN 4096
int main(void) { int sockServer = -1; int connfd = -1; struct sockaddr_in addrClient; //client addr
//01 create socket sockServer = socket(AF_INET, SOCK_STREAM, 0); //check is success if (sockServer < 0) { printf("create socket server faild!\n"); return -1; } else { printf("create socket server success!\n"); }
//02 init server, fullfill sockaddr_in struct sockaddr_in addr; bzero(&addr, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port = htons(SERVERPORT); addr.sin_addr.s_addr = htonl(INADDR_ANY) ;// receive data from any ip
//设置该端口可复用 socklen_t buflen = 1; socklen_t len = sizeof(buflen); setsockopt(sockServer, SOL_SOCKET, SO_REUSEADDR, &buflen,len);
//03 bind socket int err = bind(sockServer, (struct sockaddr *)&addr, sizeof(addr));
if (err < 0) { printf("bind() called failed!\n"); return -1; } else { printf("bind() called success! \n"); }
//04 set the socket to listen mode, ready to receive client requests if(listen(sockServer, 5) < 0) { printf("listen() called failed!\n"); return -1; } else { printf("listen() called successful!\n"); }
socklen_t sin_size = sizeof(struct sockaddr_in);
const int nTempLen = 4096; char *recvbuf = (char *)malloc((size_t)nTempLen);
while(1) { printf("wait client connecting ......\n"); connfd = accept(sockServer, (struct sockaddr *)&(addrClient), &sin_size); printf(" client connect success !!! ip is: %s \n",(inet_ntoa)(addrClient.sin_addr));
while(connfd) //modify TcpServerRecv { //取实际收到的数据长度 int nRecv = recv(connfd, recvbuf, nTempLen, 0); printf("recv size is %d \n",nRecv);
if(nRecv <=0 && errno != EINTR) { printf(" client disconnect !\n" ); break; }
if(nRecv > 1) { printf("%s \n",recvbuf);
if(send(connfd,recvbuf,nTempLen,0)<0) { printf("send msg error :%s(errno:%d)\n",strerror(errno),errno); } }
memset(recvbuf, 0, strlen(recvbuf));
}
}
puts("!!!Hello World!!!"); /* prints !!!Hello World!!! */ return EXIT_SUCCESS;

}