前卫目录网

Linux 下 Socket 编程 (linux 查看ip)


文章编号:935 / 更新时间:2024-12-30 06:21:08 / 浏览:
查看ip

Socket 编程是一种通过网络进行通信的机制。它允许程序在不同的计算机之间发送和接收数据

linux 下,Socket 编程使用 C 语言的 Berkeley 套接字 API。本教程将引导您完成在 Linux 下使用 Socket 编程的基本步骤。

创建 Socket

要创建 Socket,需要调用 socket() 函数。该函数需要三个参数:

  • domain :指定要使用的协议族,通常为 AF_INET (IPv4)或 AF_INET6 (IPv6)。
  • type :指定套接字类型,通常为 SOCK_STREAM (用于 TCP 连接)或 SOCK_DGRAM (用于 UDP 连接)。
  • e
    
    include int socket(int domain, int type, int protocol);

    绑定 Socket

    在创建 Socket 后,需要将其绑定到一个网络地址。这可以通过调用 bind() 函数来完成。该函数需要两个参数:

    • socket_fd :要绑定的套接字的文件描述符。
    • addr :指向网络地址的指针。
    
    include int bind(int socket_fd, struct sockaddr addr, socklen_t addrlen);

    监听 Socket

    如果要创建服务器套接字,需要调用 listen() 函数来监听传入的连接。该函数需要两个参数:

    • socket_fd :要监听的套接字的文件描述符。
    • backlog :允许排队的最大待处理连接数。
    
    include int listen(int socket_fd, int backlog);

    接受连接

    当一个客户端连接到服务器时,服务器可以使用 accept() 函数来接受连接。该函数需要两个参数:

    • socket_fd :要监听的套接字的文件描述符。
    • addr :指向客户端地址的指针。
    
    include int accept(int socket_fd, struct sockaddr addr, socklen_t addrlen);

    发送数据

    要发送数据,可以使用 send() 函数。该函数需要三个参数:

    • socket_fd :要发送数据的套接字的文件描述符。
    • buf :指向要发送的数据的缓冲区的指针。
    • len :要发送的数据的长度。
    
    include ssize_t send(int socket_fd, const void buf, size_t len, int flags);

    接收数据

    要接收数据,可以使用 recv() 函数。该函数需要三个参数:

    • socket_fd :要接收数据的套接字的文件描述符。
    • buf :指向要接收数据的缓冲区的指针。
    • len :要接收的最大数据量。
    
    include ssize_t recv(int socket_fd, void buf, size_t len, int flags);

    关闭 Socket

    当不再需要 Socket 时,可以使用 close() 函数来关闭它。该函数需要一个参数:

    • socket_fd :要关闭的套接字的文件描述符。
    
    include int close(int socket_fd);

    示例

    以下是一个简单的示例,演示了如何在 Linux 下使用 Socket 进行客户端-服务器通信:

    // 服务器端 include include int main() {// 创建 Socketint server_fd = socket(AF_INET, SOCK_STREAM, 0);if (server_fd == -1) {perror("socket()");exit(EXIT_FAILURE);}// 绑定 Socketstruct sockaddr_in server_addr;server_addr.sin_family = AF_INET;server_addr.sin_addr.s_addr = INADDR_ANY;server_addr.sin_port = htons(8080);if (bind(server_fd, (struct sockaddr )&server_addr, sizeof(server_addr)) == -1) {perror("bind()");exit(EXIT_FAILURE);}// 监听 Socketif (listen(server_fd, 5) == -1) {perror("listen()");exit(EXIT_FAILURE);}// 接受连接struct sockaddr_in client_addr;socklen_t client_addr_len = sizeof(client_addr);int client_fd = accept(server_fd, (struct sockaddr )&client_addr, &client_addr_len);if (client_fd == -1) {perror("accept()");exit(EXIT_FAILURE);}// 发送数据const char message = "Hello from server!";if (send(client_fd, message,strlen(message), 0) == -1) {perror("send()");exit(EXIT_FAILURE);}// 关闭 Socketclose(client_fd);close(server_fd);return 0; }// 客户端端 include include int main() {// 创建 Socketint client_fd = socket(AF_INET, SOCK_STREAM, 0);if (client_fd == -1) {perror("socket()");exit(EXIT_FAILURE);}// 连接到服务器struct sockaddr_in server_addr;server_addr.sin_family = AF_INET;server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");server_addr.sin_port = htons(8080);if (connect(client_fd, (struct sockaddr )&server_addr, sizeof(server_addr)) == -1) {perror("connect()");exit(EXIT_FAILURE);}// 接收数据char buffer[1024];if (recv(client_fd, buffer, sizeof(buffer), 0) == -1) {perror("recv()");exit(EXIT_FAILURE);}// 打印接收到的数据printf("Received message: %s\n", buffer);// 关闭 Socketclose(client_fd);return 0; }

    查看 IP 地址

    要查看计算机的 IP 地址,可以使用以下命令:

    • ifconfig
    • ip addr

    这些命令将列出计算机的所有网络接口及其对应的 IP 地址。


相关标签: linux查看ip编程SocketLinux

本文地址:https://www.qianwe.com/article/58d9ac8384d2a103eb4f.html

上一篇:ActiveX控件用于Web应用程序和操作系统的高...
下一篇:超链接文本超链接文本...

发表评论

温馨提示

做上本站友情链接,在您站上点击一次,即可自动收录并自动排在本站第一位!
<a href="https://www.qianwe.com/" target="_blank">前卫目录网</a>