[linux] C语言Linux系统编程-socket回声客户端详解编程语言

回声客户端:

1.所谓“回声”,是指客户端向服务器发送一条数据,服务器再将数据原样返回给客户端,就像声音一样,遇到障碍物会被“反弹回来”。

2.客户端也可以使用 write() / send() 函数向服务器发送数据,服务器也可以使用 read() / recv() 函数接收数据

 

#define BUF_SIZE 100

1.#开头的是预处理命令

2.#define是宏定义,在编译预处理时,会对宏名进行宏代换/宏展开,就是替换掉

 

scanf(“%s”, bufSend);

1.scanf() 读取到空格时认为一个字符串输入结束

2.可以使用gets()替换

echo_server.c

 

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
#include <unistd.h> 
#include <arpa/inet.h> 
#include <sys/socket.h> 
#include <netinet/in.h> 
#define BUF_SIZE 100 
int main(){ 
        //创建套接字 
        int serv_sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); 
        //将套接字和IP、端口绑定 
        struct sockaddr_in serv_addr; 
        memset(&serv_addr, 0, sizeof(serv_addr));  //每个字节都用0填充 
        serv_addr.sin_family = AF_INET;  //使用IPv4地址 
        serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");  //具体的IP地址 
        serv_addr.sin_port = htons(1234);  //端口 
        bind(serv_sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr)); 
        //进入监听状态,等待用户发起请求 
        listen(serv_sock, 20); 
        //接收客户端请求 
        struct sockaddr_in clnt_addr; 
        socklen_t clnt_addr_size = sizeof(clnt_addr); 
        int clnt_sock = accept(serv_sock, (struct sockaddr*)&clnt_addr, &clnt_addr_si 
ze); 
 
        char buffer[BUF_SIZE];  //缓冲区 
        int strLen = read(clnt_sock, buffer, BUF_SIZE);  //接收客户端发来的数据 
        write(clnt_sock, buffer,sizeof(buffer)); 
        //关闭套接字 
        close(clnt_sock); 
        close(serv_sock); 
        return 0; 
}

 

echo_client.c

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
#include <unistd.h> 
#include <arpa/inet.h> 
#include <sys/socket.h> 
#define BUF_SIZE 100 
int main(){ 
        //创建套接字 
        int sock = socket(AF_INET, SOCK_STREAM, 0);  
        //向服务器(特定的IP和端口)发起请求 
        struct sockaddr_in serv_addr; 
        memset(&serv_addr, 0, sizeof(serv_addr));  //每个字节都用0填充 
        serv_addr.sin_family = AF_INET;  //使用IPv4地址 
        serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");  //具体的IP地址 
        serv_addr.sin_port = htons(1234);  //端口 
        connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr)); 
 
        //回声客户端 
        char bufSend[BUF_SIZE]; 
        printf("输入字符串: "); 
        scanf("%s",bufSend); 
        write(sock, bufSend,sizeof(bufSend)); 
 
        //读取服务器传回的数据 
        char buffer[40]; 
        read(sock, buffer, sizeof(buffer)-1); 
 
        printf("服务器返回: %s/n", buffer); 
 
        //关闭套接字 
        close(sock); 
        return 0; 
}

效果:

[linux] C语言Linux系统编程-socket回声客户端详解编程语言

使用while(1) 让代码进入死循环,一直监听客户端的请求

echo_server.c

        while(1){ 
                int clnt_sock = accept(serv_sock, (struct sockaddr*)&clnt_addr, &clnt 
_addr_size); 
 
                char buffer[BUF_SIZE];  //缓冲区 
                int strLen = read(clnt_sock, buffer, BUF_SIZE);  //接收客户端发来的数 
据 
                write(clnt_sock, buffer,sizeof(buffer)); 
                //关闭套接字 
                close(clnt_sock); 
        }

echo_client.c

        while(1){ 
                //创建套接字 
                int sock = socket(AF_INET, SOCK_STREAM, 0);  
                //向服务器(特定的IP和端口)发起请求 
                struct sockaddr_in serv_addr; 
                memset(&serv_addr, 0, sizeof(serv_addr));  //每个字节都用0填充 
                serv_addr.sin_family = AF_INET;  //使用IPv4地址 
                serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");  //具体的IP地址 
                serv_addr.sin_port = htons(1234);  //端口 
                connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr)); 
 
                //回声客户端 
                char bufSend[BUF_SIZE]; 
                printf("输入字符串: "); 
                scanf("%s",bufSend); 
                write(sock, bufSend,sizeof(bufSend)); 
 
                //读取服务器传回的数据 
                char buffer[40]; 
                read(sock, buffer, sizeof(buffer)-1); 
 
                printf("服务器返回: %s/n", buffer); 
 
                //关闭套接字 
                close(sock);}

 效果:

[linux] C语言Linux系统编程-socket回声客户端详解编程语言

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/12509.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论