如何在字符串变量中存储服务器地址和端口

How to store a server address and port in a string variable

我正在创建一个 client/server 套接字,我需要使用 sockaddr_in 函数 getsocketname() 获取套接字服务器 IP。但是,我不确定如何执行此操作,因为我无法执行

之类的操作
struct sockaddr_in servAddr;
int IP = servAddr.getsockname(sock, (struct sockaddr *) %servAddr,sizeof(servAddr));

我相信 getsockname() 用于客户端,而不是服务器,并且只有在使用套接字成功连接到您定义的服务器后才使用。

解释一下,将客户端连接到服务器的可能流程是:

  1. 创建一个 socketfd 变量,如 'sock' 你的情况
  2. 使用 socket(...) 调用打开 socketfd var
  3. 创建您自己的变量来存储服务器详细信息,比方说:
    struct sockaddr_in serverAddr;

    serverAddr.sin_family = AF_INET;

    serverAddr.sin_addr.s_addr = inet_addr("0.0.0.0"); // replace with actual server IP

    serverAddr.sin_port = htons(80); // replace with actual port
  1. 使用 connect(...) 调用将 sockfd 连接到 serverAddr 指定的服务器
  2. 使用 getsockname(...) 调用获取此连接的客户端 IP 和端口
    getsockname(socketfd, (struct sockaddr *) &clientAddr, sizeof(clientAddr));
    
    char buffer[INET_ADDRSTRLEN]; // stores the client side IP address

    inet_ntop(AF_INET, &clientAddr.sin_addr, buffer, sizeof(buffer));

    int port = (int) ntohs(clientAddr.sin_port); // stores the client side port
    
    printf("IP address: %s\n", buffer);

    printf("Port: %d\n", port);