📜  Unix套接字-端口和服务(1)

📅  最后修改于: 2023-12-03 15:05:45.922000             🧑  作者: Mango

Unix套接字-端口和服务

在Unix系统中,套接字(socket)是用于在网络上进行进程间通信的一种机制。它允许不同的程序在同一台计算机或不同的计算机之间进行数据交换。

套接字的使用需要使用端口号来标识要通信的进程。端口号是一个16位的整数,它可以唯一地标识一个应用程序或服务。在Unix系统中,有一些常用的端口号已经被指定为特定的服务。

常见的端口和服务

下面是一些常见的端口和对应的服务:

  • 20、21:FTP(文件传输协议)服务常用的端口号,用于上传和下载文件。
  • 22:SSH(安全外壳协议)服务的端口号,用于远程登录和安全文件传输。
  • 25:SMTP(简单邮件传输协议)服务的端口号,用于邮件的发送。
  • 80:HTTP(超文本传输协议)服务的端口号,用于Web页面的访问。
  • 443:HTTPS(HTTP安全)服务的端口号,用于加密的Web页面的访问。
如何使用端口和服务

在Unix系统中,可以使用套接字编程接口来操作套接字和管理端口和服务。以下是一个简单的示例代码,展示了如何使用C语言中的套接字编程接口来创建一个监听指定端口号的套接字:

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

int main() {
    int sockfd = socket(AF_INET, SOCK_STREAM, 0); // 创建套接字
    if (sockfd < 0) {
        perror("socket");
        exit(EXIT_FAILURE);
    }
    
    struct sockaddr_in addr;
    addr.sin_family = AF_INET;
    addr.sin_port = htons(8080); // 指定端口号
    addr.sin_addr.s_addr = INADDR_ANY;
    
    int bind_result = bind(sockfd, (struct sockaddr*)&addr, sizeof(addr)); // 绑定端口号
    if (bind_result < 0) {
        perror("bind");
        exit(EXIT_FAILURE);
    }
    
    int listen_result = listen(sockfd, 5); // 监听端口号
    if (listen_result < 0) {
        perror("listen");
        exit(EXIT_FAILURE);
    }
    
    printf("Listening on port 8080...\n");
    
    while (1) {
        // 接受连接并处理数据
    }
    
    close(sockfd);
    
    return 0;
}

以上代码中,我们使用socket()函数创建一个套接字,然后使用bind()函数将套接字绑定到指定的端口号上,最后使用listen()函数监听端口号。这样,我们就可以通过这个套接字接受来自客户端的连接,并进行数据交换。

小结

Unix套接字提供了一种方便的机制,用于在网络上进行进程间通信。通过使用端口号和服务,我们可以实现不同程序之间的数据交换。本文只是简单介绍了Unix套接字中的端口和服务概念,并提供了一个简单的示例代码供参考。如果你想深入学习套接字编程,建议参考相关的文档和教程。