Linux c==使用父子程序實現TCP通訊
阿新 • • 發佈:2019-02-17
include
include
include
include
include
include
include
include
define MY_PORT 3333
int main(int argc ,char **argv)
{
int listen_fd,accept_fd;
struct sockaddr_in client_addr;
int n;
int nbytes;
if((listen_fd=socket(AF_INET,SOCK_STREAM,0))<0) { printf("Socket Error:%s\n\a",strerror(errno)); exit(1); } bzero(&client_addr,sizeof(struct sockaddr_in)); client_addr.sin_family=AF_INET; client_addr.sin_port=htons(MY_PORT); client_addr.sin_addr.s_addr=htonl(INADDR_ANY); n=1; /* 如果伺服器終止後,伺服器可以第二次快速啟動而不用等待一段時間 */ setsockopt(listen_fd,SOL_SOCKET,SO_REUSEADDR,&n,sizeof(int)); if(bind(listen_fd,(struct sockaddr *)&client_addr,sizeof(client_addr))<0) { printf("Bind Error:%s\n\a",strerror(errno)); exit(1); } listen(listen_fd,5); while(1) { accept_fd=accept(listen_fd,NULL,NULL); if((accept_fd<0)&&(errno==EINTR)) continue; else if(accept_fd<0) { printf("Accept Error:%s\n\a",strerror(errno)); continue; } if((n=fork())==0) { /* 子程序處理客戶端的連線 */ char buffer[1024]; if((nbytes=read(accept_fd,buffer,1024))==-1) { fprintf(stderr,"Read Error:%s\n",strerror(errno)); exit(1); } buffer[nbytes]='\0'; printf("Server received %s\n",buffer); close(listen_fd); close(accept_fd); exit(0); } else close(accept_fd); }
}