linux socket通信源码

    xiaoxiao2021-12-14  14

    初学Socket通信,参考的是LinuxC程序设计大全的23章的23-5例子,但是发现这个例子源码里有好几处错误,因为初学,很多不懂,吃了亏,因此将修改后能正常运行的代码记录在这里 ,参考http://www.cnblogs.com/xudong-bupt/archive/2013/12/29/3483059.html:

    server.c 

    #include<stdio.h> #include<unistd.h> #include<ctype.h> #include<sys/socket.h> #include<arpa/inet.h> #include<string.h> #include<stdlib.h> #define MAX_LEN 100 void upper2lower(char *p) {     if(p == NULL){         return ;     }     for(;*p !='\0';p++){         if(*p >='a' && *p <='z'){             *p -= ('a' - 'A');         }     }      } int main (int argc ,char **argv) {     struct sockaddr_in sin;     struct sockaddr_in cin;     int listen_fd,connect_fd;     socklen_t len;     char buf[MAX_LEN];     char addr_p[INET_ADDRSTRLEN]; /** 这个长度在哪里定义*/     int port= 8887;     int n;     int ret;     bzero(&sin,sizeof(sin));     sin.sin_family = AF_INET;     sin.sin_addr.s_addr =htonl(INADDR_ANY);// 接受任意的IP     sin.sin_port = htons(port);          listen_fd = socket(AF_INET,SOCK_STREAM,0);     printf("listen_fd= %d\n",listen_fd);     ret =  bind(listen_fd,(struct sockaddr*)&sin,sizeof(sin));     printf("ret= %d\n",ret);     ret =  listen(listen_fd,10);     printf("ret= %d\n",ret);     printf("Waiting ...\n");     len = sizeof(cin);     while(1){         connect_fd = accept(listen_fd,(struct sockaddr*)&cin,&len);                  printf("connect_fd= %d\n",connect_fd);         n = read (connect_fd,buf,MAX_LEN);         printf("read Len = %d\n",n);         inet_ntop(AF_INET,&cin.sin_addr,addr_p,sizeof(addr_p));//地址格式转化,点分十进制转换成字符串                 printf("client IP is %s,port is %d \n",addr_p,ntohs(cin.sin_port));                  printf("connectis %s\n",buf);         upper2lower(buf);         write(connect_fd,buf,n);         close(connect_fd);     }         if(close(listen_fd)==-1){             perror("fail to close ");  /**注意这里打印输出的信息*/             exit(1);         }     return 0; }

    client.c

    #include<stdio.h> #include<unistd.h> #include<ctype.h> #include<sys/socket.h> #include<arpa/inet.h> #include<string.h> #include<stdlib.h> #define MAX_LEN 100 int main (int argc ,char **argv) { struct sockaddr_in sin; char buf[MAX_LEN]; int sfd; char addr_p[INET_ADDRSTRLEN]; /** 这个长度在哪里定义*/ int port= 8887; char *Send = "senddate"; if(argc > 1){ Send = argv[1]; } bzero(&sin,sizeof(sin)); sin.sin_family = AF_INET; // IPv4 inet_pton(AF_INET,"127.0.0.1",&sin.sin_addr); //地址格式转化,字符串转换成点分十进制      sin.sin_port = htons(port); //主机字节序转换网络字节序  sfd = socket(AF_INET,SOCK_STREAM,0); if((connect(sfd,(struct sockaddr *)&sin,sizeof(sin)))<0){         perror("connect");         exit(1); } printf("start send data =%s\n",Send); write(sfd,Send,strlen(Send)); /**发送字符串,包含字符串结束符*/ read(sfd,buf,MAX_LEN); printf("receive from server : %s\n",buf); close(sfd); return 0; }

    转载请注明原文地址: https://ju.6miu.com/read-972270.html

    最新回复(0)