Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何在字符串变量中存储服务器地址和端口_C_Sockets_Serversocket - Fatal编程技术网

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

C 如何在字符串变量中存储服务器地址和端口,c,sockets,serversocket,C,Sockets,Serversocket,我正在创建客户机/服务器套接字,需要使用函数getsocketname()中的sockaddr\u获取套接字服务器IP。然而,我不知道如何做到这一点,因为我无法做类似的事情 struct sockaddr_in servAddr; int IP = servAddr.getsockname(sock, (struct sockaddr *) %servAddr,sizeof(servAddr)); 我相信getsockname()用于客户端,而不是服务器,并且只有在使用套接字成功连接到您定义的

我正在创建客户机/服务器套接字,需要使用函数getsocketname()中的sockaddr\u获取套接字服务器IP。然而,我不知道如何做到这一点,因为我无法做类似的事情

struct sockaddr_in servAddr;
int IP = servAddr.getsockname(sock, (struct sockaddr *) %servAddr,sizeof(servAddr));
我相信getsockname()用于客户端,而不是服务器,并且只有在使用套接字成功连接到您定义的服务器之后才使用

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

  • 创建一个socketfd变量,如您案例中的“sock”
  • 使用套接字(…)调用打开socketfd变量
  • 创建自己的变量来存储服务器详细信息,例如:
  • serverAddr中的结构sockaddr\u; serverAddr.sin_family=AF_INET; serverAddr.sin_addr.s_addr=inet_addr(“0.0.0.0”);//替换为实际的服务器IP serverAddr.sin_port=htons(80);//替换为实际端口
  • 使用Connect(…)调用将sockfd连接到使用serverAddr指定的服务器
  • 使用getsockname(…)调用获取此连接的客户端IP和端口
  • getsockname(socketfd,(struct sockaddr*)&clientAddr,sizeof(clientAddr));
    字符缓冲区[INET_ADDRSTRLEN];//存储客户端IP地址
    inet_ntop(AF_inet和clientAddr.sin_addr、buffer、sizeof(buffer));
    int port=(int)ntohs(clientAddr.sin_port);//存储客户端端口
    printf(“IP地址:%s\n”,缓冲区);
    printf(“端口:%d\n”,端口);
    
    也许您可以添加一些细节,比如涉及哪个操作系统和编译器?此外,如果提供的代码更完整,也会有帮助;例如可编译程序包含main()等。在C中,结构不能有成员方法。没有函数
    getsocketname()
    。你是说?