Linux系统中的Socket编程

Linux系统教程

Linux系统中的Socket编程

2023-05-12 08:45


                                            




Linux 系统中的 Socket 编程

Socket 是一种在网络中,进行进程间通信或者网络通信的方式。在 Linux 系统中,Socket 被广泛应用于网络通信领域,是开发网络应用软件的重要组件之一。

Socket 编程基础

Socket 编程是基于传输层 TCP/IP 协议而展开的,主要涉及到一些概念和函数的使用,下面对基础进行简要介绍。

概念

Socket 通信是一种面向连接的通信方式,它是通过套接字(Socket)来实现的。
套接字定义了通信的一些基本参数,包括地址族、套接字类型、协议类型、监听的网络接口等。

函数

  • socket(): 创建一个套接字
  • bind(): 绑定套接字到一个地址
  • listen(): 开始监听客户端连接
  • accept(): 接受连接请求并返回一个新的套接字
  • connect(): 与服务器建立连接
  • send(), recv(): 发送和接收数据
  • close(): 关闭套接字

Socket 编程实践

下面通过一个简单的 Server-Client 示例来展示基本的 Socket 编程实现。

Server 端代码

#include <sys/socket.h>
#include <netinet/in.h>

int main(){
    // 创建 socket
    int sock_fd = socket(AF_INET, SOCK_STREAM, 0);

    // 绑定端口
    struct sockaddr_in server_address;
    server_address.sin_family = AF_INET;
    server_address.sin_port = htons(8080);
    server_address.sin_addr.s_addr = INADDR_ANY;
    bind(sock_fd, (struct sockaddr *)&server_address, sizeof(server_address));

    // 监听连接
    listen(sock_fd, 5);

    // 接受连接请求
    struct sockaddr_in client_address;
    int client_fd = accept(sock_fd, (struct sockaddr *)&client_address, NULL);

    // 发送数据
    char *message = "Hello, Client!";
    send(client_fd, message, strlen(message), 0);

    // 关闭套接字
    close(client_fd);
    close(sock_fd);
}

Client 端代码

#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int main(){
    // 创建 socket
    int sock_fd = socket(AF_INET, SOCK_STREAM, 0);

    // 连接服务器
    struct sockaddr_in server_address;
    server_address.sin_family = AF_INET;
    server_address.sin_port = htons(8080);
    inet_pton(AF_INET, "127.0.0.1", &server_address.sin_addr);
    connect(sock_fd, (struct sockaddr *)&server_address, sizeof(server_address));

    // 接收数据
    char buffer[1024];
    recv(sock_fd, buffer, 1024, 0);
    printf("%s\n", buffer);

    // 关闭套接字
    close(sock_fd);
}

总结

Socket 编程是在网络通信领域中应用最广泛的编程方式之一,是 Linux 开发者必备的基础知识之一。本文简要介绍了 Socket 编程的概念、相关函数的使用,以及通过一个简单的 Server-Client 示例展示了 Socket 编程的基本实现。