linux网络编程——客户端编程

\qquad 一个简单的客户端/服务端通信程序。
\qquad 服务端:将客户端上传的字符串,改为大写字符串,并且显示客户端的IP和端口号。

#include<stdio.h>
#include<unistd.h>
#include<sys/socket.h>
#include<stdlib.h>
#include<ctype.h>
#include<arpa/inet.h>

#define SERV_PORT 6666
int main()
{
    
    
        int lfd,cfd;
        struct sockaddr_in serv_addr,clie_addr;
        socklen_t clie_addr_len,clie_IP_len;
        char buf[BUFSIZ],clie_IP[BUFSIZ];
        int n,ret;

        lfd = socket(AF_INET,SOCK_STREAM,0);
        if(lfd==-1){
    
    
                perror("socket error");
                exit(1);
        }

        serv_addr.sin_family = AF_INET;
        serv_addr.sin_port = htons(SERV_PORT);
        serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);

        ret = bind(lfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr));
        if(ret==-1){
    
    
                perror("bind error");
                exit(1);
        }   

        ret = listen(lfd,128);
        if(ret==-1){
    
    
                perror("listen error");
                exit(1);
        }

        clie_addr_len = sizeof(clie_addr);
        cfd = accept(lfd,(struct sockaddr *)&clie_addr,&clie_addr_len);
        if(cfd==-1){
    
    
                perror("accept error");
                exit(1);
        }

        printf("client IP:%s,client port:%d\n",
                inet_ntop(AF_INET,&clie_addr.sin_addr.s_addr,clie_IP,sizeof(clie_IP)),
                ntohs(clie_addr.sin_port));
        while(1){
    
    
        n = read(cfd,buf,sizeof(buf));
        for(int i=0;i<n;i++){
    
    
                buf[i] = toupper(buf[i]);
        }
        write(cfd,buf,n);
        }
        close(lfd);
        close(cfd);
        return 0;
}

\qquad 客户端:将字符串上传到服务端

#include <stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<arpa/inet.h> 
#include<string.h>
#define SERV_IP "192.168.0.2"
#define SERV_PORT 6666
int main()
{
    
    
        int cfd;
        struct sockaddr_in serv_addr;
        socklen_t serv_addr_len;
        char buf[BUFSIZ];
        int n;

        cfd = socket(AF_INET,SOCK_STREAM,0);

        memset(&serv_addr,0,sizeof(serv_addr)); 
        serv_addr.sin_family = AF_INET;
        serv_addr.sin_port = htons(SERV_PORT);
        inet_pton(AF_INET,SERV_IP,&serv_addr.sin_addr.s_addr);

        connect(cfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr));

        while(1){
    
    
                fgets(buf,sizeof(buf),stdin);
                write(cfd,buf,strlen(buf));
                n = read(cfd,buf,sizeof(buf));
                write(STDOUT_FILENO,buf,n);
        }   
    
        close(cfd);

        return 0;
}

猜你喜欢

转载自blog.csdn.net/zxr916/article/details/114223212
今日推荐