如何在字符串变量中存储服务器地址和端口
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() 用于客户端,而不是服务器,并且只有在使用套接字成功连接到您定义的服务器后才使用。
解释一下,将客户端连接到服务器的可能流程是:
- 创建一个 socketfd 变量,如 'sock' 你的情况
- 使用 socket(...) 调用打开 socketfd var
- 创建您自己的变量来存储服务器详细信息,比方说:
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
- 使用 connect(...) 调用将 sockfd 连接到 serverAddr 指定的服务器
- 使用 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);
我正在创建一个 client/server 套接字,我需要使用 sockaddr_in 函数 getsocketname() 获取套接字服务器 IP。但是,我不确定如何执行此操作,因为我无法执行
之类的操作struct sockaddr_in servAddr;
int IP = servAddr.getsockname(sock, (struct sockaddr *) %servAddr,sizeof(servAddr));
我相信 getsockname() 用于客户端,而不是服务器,并且只有在使用套接字成功连接到您定义的服务器后才使用。
解释一下,将客户端连接到服务器的可能流程是:
- 创建一个 socketfd 变量,如 'sock' 你的情况
- 使用 socket(...) 调用打开 socketfd var
- 创建您自己的变量来存储服务器详细信息,比方说:
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
- 使用 connect(...) 调用将 sockfd 连接到 serverAddr 指定的服务器
- 使用 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);