Linux下的C語言程式設計——簡單實現tcp客戶端和伺服器
阿新 • • 發佈:2019-02-13
以下程式均未做錯誤處理,等有時間一定完善
客戶端
#include <stdio.h> #include <sys/socket.h> #include <stdlib.h> #include <netinet/in.h> #include <string.h> int main(int argc,char **argv) { int sockfd; int n; struct sockaddr_in servaddr,cliaddr; char sendbuf[1000]; char recvbuf[1000]; if(argc != 2) { printf("usage:client <ip address>\n"); exit(-1); } sockfd = socket(AF_INET,SOCK_STREAM,0); bzero(&servaddr,sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = inet_addr(argv[1]); servaddr.sin_port = htons(3200); connect(sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr)); while(fgets(sendbuf,1000,stdin) != NULL) { sendto(sockfd,sendbuf,strlen(sendbuf),0,(struct sockaddr *)&servaddr,sizeof(servaddr)); n = recvfrom(sockfd,recvbuf,1000,0,NULL,NULL);//(struct sockaddr*)&cliaddr, recvbuf[n] = '\0'; fputs(recvbuf,stdout); } close(sockfd); return 0; }
伺服器
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <netinet/in.h> #include <sys/socket.h> void strlwr(char *str) { char *p; p = str; while(*p != '\0') { if((*p >= 'a') && (*p <= 'z')) { *p -= 32; } p++; } } int main() { pid_t pid; int listenfd,connfd; int n; struct sockaddr_in servaddr,cliaddr; socklen_t clilen; char mesg[1000]; listenfd = socket(AF_INET,SOCK_STREAM,0); bzero(&servaddr,sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY); servaddr.sin_port = htons(3200); int opt = 1; setsockopt(listenfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt)); bind(listenfd,(struct sockaddr *)&servaddr,sizeof(servaddr)); listen(listenfd,1024); for(;;) { clilen = sizeof(cliaddr); connfd = accept(listenfd,(struct sockaddr*)&cliaddr,&clilen); if((pid = fork()) == 0) { close(listenfd); for(;;) { n = recvfrom(connfd,mesg,1000,0,(struct sockaddr*)&cliaddr,&clilen); if(n == 0) { printf("client closed!\n"); exit(-1); } printf("********************\n"); mesg[n] = '\0'; printf("%s\n",mesg); printf("*********************\n"); strlwr(mesg); sendto(connfd,mesg,n,0,(struct sockaddr *)&cliaddr,sizeof(cliaddr)); } close(connfd); } } close(listenfd); return 0; }