linux

    技术2022-07-17  84

    #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> #include <netinet/in.h> // for struct sockaddr_in #include <netinet/ip.h> /* superset of previous */ #include <arpa/inet.h> //for inet_pton #include<stdio.h> #include<ctype.h> #include<string.h> #include <unistd.h> #define SPORT 6666 #define SIP "127.0.0.1" int main(void) { int sfd = socket(AF_INET,SOCK_STREAM,0); if(sfd<0) { printf("创建套接字失败\n"); return -1; } int nfd = 0; int ret = 0; struct sockaddr_in addr; struct sockaddr_in caddr; memset(&caddr,0,sizeof(caddr)); addr.sin_family = AF_INET; addr.sin_port = htons(SPORT); int num = 0; ret = inet_pton(AF_INET,SIP,&addr.sin_addr); /* inet_pton 这个地方自己老是掉进去,就是这个传入参数,目前我将struct socdaddr_in 中的sin-addr传进去,绑定端口就会成功.*/ socklen_t clen = sizeof(caddr); int n = 0; char buf[BUFSIZ]; memset(buf,0,BUFSIZ); //addr.sin_addr.s_addr=htonl(INADDR_ANY); char tmp[128]; ret = bind(sfd,(struct sockaddr *)&addr,sizeof(addr)); if(ret <0) { printf("绑定端口失败\n"); return -1; } listen(sfd,128); nfd = accept(sfd,(struct sockaddr*)&caddr,&clen); printf("客户端端口:%d \n",ntohs(caddr.sin_port)); inet_ntop(AF_INET,&caddr.sin_addr,tmp,128); printf("客户端ip:%s \n",tmp); /*这个地方:accept之后,接收到一个客户端连接,之后就会往下走,所以要想实现高并发, 这个地方需要针对accept 采用多线程多进程 */ while(1) { n = read(nfd,buf,sizeof(buf)); for(int i = 0; i < n;i++) { buf[i] = toupper(buf[i]); } write(nfd,buf,n); } close(nfd); close(sfd); return 0; }

    客户端代码:

    #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> #include <netinet/in.h> // for struct sockaddr_in #include <netinet/ip.h> /* superset of previous */ #include <arpa/inet.h> //for inet_pton #include<stdio.h> #include<ctype.h> #include<string.h> #include <unistd.h> #define SPORT 6666 #define SIP "127.0.0.1" int main(void) { int sfd = socket(AF_INET,SOCK_STREAM,0); if(sfd<0) { printf("创建套接字失败\n"); return -1; } char buf[BUFSIZ]; bzero(buf,BUFSIZ); int ret = 0; int n = 0; struct sockaddr_in addr; bzero(&addr,sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port = htons(SPORT); ret = inet_pton(AF_INET,SIP,&addr.sin_addr); connect(sfd,(struct sockaddr*)&addr,sizeof(addr)); while(1) { fgets(buf,sizeof(buf),stdin); write(sfd,buf,strlen(buf)); n = read(sfd,buf,strlen(buf)); write(stdout,buf,n); } close(sfd); return 0; }

     

    Processed: 0.020, SQL: 9