Linux c实现服务端与客户端聊天

Linux c实现服务端与客户端聊天

主要利用socket通信实现,香港空间,具体代码如下

客户端:

1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #include <sys/types.h> 5 #include <sys/socket.h> 6 #include <netinet/in.h> 7 #include <arpa/inet.h> 8 #include <unistd.h> 9 #define MAXLINE 511*EXIT_STRING = ;13 int input_and_send(int sd);14 int recv_and_print(int sd);main(int argc, char *argv[]){20 pid_t pid;21int s; sockaddr_in servaddr;(argc != 3){,argv[0]);26exit(0);27 }28if((s = socket(PF_INET, SOCK_STREAM, 0)) < 0){);30exit(0);31 }3233bzero((char *)&servaddr,sizeof(servaddr));34servaddr.sin_family = AF_INET;35inet_pton(AF_INET, argv[1], &servaddr.sin_addr);36servaddr.sin_port = htons(atoi(argv[2]));(connect(s,(struct sockaddr *)&servaddr,sizeof(servaddr)) < 0){);40exit(0);41 }42if( (pid=fork())>0 )43 input_and_sent1(s);(pid == 0)45 recv_and_print(s);46 close(s);;48 }input_and_sent1(int sd){buf[MAXLINE+1];53int nbyte;54while(fgets(buf, sizeof(buf),stdin) != NULL){55nbyte = strlen(buf);56 write(sd, buf, strlen(buf));57if(strstr(buf,EXIT_STRING) != NULL){);59 close(sd);60exit(0);61 }62 };64 }recv_and_print(int sd){67char buf[MAXLINE+1];68int nbyte;69while(1){70if((nbyte=read(sd, buf,MAXLINE))<0){);72 close(sd);73exit(0);74 }75buf[nbyte] = 0;76if(strstr(buf,EXIT_STRING) != NULL)77break;,buf);79 };81 }8283

服务器端:

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <unistd.h>;int recv_and_print(int sd);int input_and_send(int sd);#define MAXLINE 511int main(int argc, char *argv[]){struct sockaddr_in cliaddr, servaddr;int listen_sock,accp_sock,addrlen = sizeof(cliaddr);pid_t pid;if(argc != 2){printf(,argv[0]);exit(0);}if((listen_sock=socket(PF_INET, SOCK_STREAM, 0)) < 0){perror();exit(0);}bzero((char *)&servaddr, sizeof(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_addr.s_addr = htonl(INADDR_ANY);servaddr.sin_port = htons(atoi(argv[1]));if(bind(listen_sock, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0){perror();exit(0);}puts();listen(listen_sock, 1);if((accp_sock = accept(listen_sock,(struct sockaddr *)&cliaddr, &addrlen)) < 0){perror();exit(0);}puts();if((pid = fork()) > 0)input_and_send(accp_sock);else if(pid == 0)recv_and_print(accp_sock);close(listen_sock);close(accp_sock);return 0;}int input_and_send(int sd){char buf[MAXLINE+1];int nbyte;while(fgets(buf, sizeof(buf),stdin) != NULL){nbyte = strlen(buf);write(sd, buf ,strlen(buf));if(strstr(buf, EXIT_STRING) != NULL){puts();close(sd);exit(0);}}return 0;}int recv_and_print(int sd){char buf[MAXLINE+1];int nbyte;while(1){if((nbyte=read(sd, buf, MAXLINE)) < 0){perror();close(sd);exit(0);}buf[nbyte] = 0;if(strstr(buf, EXIT_STRING) != NULL)break;printf(,buf);}return 0;}

第一次写博客,香港服务器租用,一直都是伸手党,今天就把我之前写过的东西分享下,代码正常运行的,仅供参考。

posted on

,香港服务器租用原以为“得不到”和“已失去”是最珍贵的,可原来把握眼前才是最重要的。

Linux c实现服务端与客户端聊天

相关文章:

你感兴趣的文章:

标签云: