当前位置:首页 > 行业动态 > 正文

如何通过实际案例学习Linux网络编程?

当然,以下是一个简单的 Linux 网络编程实例,使用 C 语言创建一个简单的 TCP 服务器:,,“ c,#include,#include,#include,#include,#include,,int main() {, int server_fd, new_socket;, struct sockaddr_in address;, int addrlen = sizeof(address);,, if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {, perror("socket failed");, exit(EXIT_FAILURE);, },, address.sin_family = AF_INET;, address.sin_addr.s_addr = INADDR_ANY;, address.sin_port = htons(8080);,, if (bind(server_fd, (struct sockaddr *)&address, sizeof(address))``

在Linux环境下进行网络编程,通常涉及使用套接字(sockets)来建立网络连接和通信,本文将通过一个具体的实例,展示如何在C语言中使用Linux系统调用来实现一个简单的客户端-服务器模型。

如何通过实际案例学习Linux网络编程?  第1张

环境准备

确保你的Linux系统中安装了GCC编译器,因为我们将使用C语言编写程序,你可以通过以下命令检查GCC是否已安装:

gcc --version

如果没有安装,你可以通过包管理器安装它,例如在Ubuntu上:

sudo apt update
sudo apt install build-essential

服务器端代码

服务器端的主要任务是监听特定端口,等待客户端的连接请求,并在连接建立后与客户端进行数据交换,下面是一个简单的TCP服务器示例:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#define PORT 8080
int main() {
    int server_fd, new_socket;
    struct sockaddr_in address;
    int addrlen = sizeof(address);
    char buffer[1024] = {0};
    const char *hello = "Hello from server";
    // 创建套接字文件描述符
    if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
        perror("socket failed");
        exit(EXIT_FAILURE);
    }
    // 绑定地址和端口
    address.sin_family = AF_INET;
    address.sin_addr.s_addr = INADDR_ANY;
    address.sin_port = htons(PORT);
    if (bind(server_fd, (struct sockaddr *)&address, sizeof(address))<0) {
        perror("bind failed");
        exit(EXIT_FAILURE);
    }
    // 开始监听
    if (listen(server_fd, 3) < 0) {
        perror("listen");
        exit(EXIT_FAILURE);
    }
    printf("Server is listening on port %d...
", PORT);
    // 接受来自客户端的连接
    if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen))<0) {
        perror("accept");
        exit(EXIT_FAILURE);
    }
    // 读取并响应客户端消息
    read(new_socket, buffer, 1024);
    printf("Message from client: %s
", buffer);
    send(new_socket, hello, strlen(hello), 0);
    printf("Hello message sent
");
    // 关闭套接字
    close(new_socket);
    close(server_fd);
    return 0;
}

客户端代码

客户端的任务是连接到服务器指定的IP地址和端口,发送一条消息,并接收服务器的响应,以下是一个简单的TCP客户端示例:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <arpa/inet.h>
#define PORT 8080
int main() {
    struct sockaddr_in serv_addr;
    int sock = 0;
    char buffer[1024] = {0};
    const char *hello = "Hello from client";
    // 创建套接字文件描述符
    if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
        printf("
 Socket creation error 
");
        return -1;
    }
    serv_addr.sin_family = AF_INET;
    serv_addr.sin_port = htons(PORT);
    // 转换IPv4和IPv6地址从文本到二进制形式
    if(inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr)<=0) {
        printf("
Invalid address/ Address not supported 
");
        return -1;
    }
    // 连接到服务器
    if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {
        printf("
Connection Failed 
");
        return -1;
    }
    // 发送消息到服务器
    send(sock, hello, strlen(hello), 0);
    printf("Hello message sent
");
    read(sock, buffer, 1024);
    printf("Message from server: %s
", buffer);
    // 关闭套接字
    close(sock);
    return 0;
}

编译和运行

将上述服务器和客户端代码分别保存为server.c和client.c文件,然后使用以下命令编译它们:

gcc server.c -o server
gcc client.c -o client

首先运行服务器:

./server

然后在另一个终端窗口中运行客户端:

./client

你应该会看到客户端发送的消息被服务器接收,并且服务器的响应被客户端接收。

相关问答FAQs

Q1: 如果我想让我的服务器能够处理多个客户端怎么办?

A1: 要使服务器能够处理多个客户端,你需要使用多线程或多进程,在Linux中,你可以使用pthread库来创建线程,每当有新的客户端连接时,你可以创建一个新线程来处理该客户端的请求,而主线程继续监听新的连接请求,这样,你的服务器就可以同时服务多个客户端了。

Q2: 我如何更改服务器监听的端口号?

A2: 要更改服务器监听的端口号,你只需要修改服务器代码中#define PORT 8080这一行的值,如果你想让服务器监听端口9090,只需将8080改为9090即可,确保客户端代码中的端口号也相应地更改为9090。

小伙伴们,上文介绍了“linux 网络编程 实例”的内容,你了解清楚吗?希望对你有所帮助,任何问题可以给我留言,让我们下期再见吧。

0