我写了一个简单的客户端 - 服务器程序。我能够在客户端程序中打印客户端的端口号。价值观是动态的。
但是当我尝试在服务器程序中打印它时,它会给我服务器的端口号而不是客户端。
connfd = accept(listenfd, (struct sockaddr*) &cliaddr, &clilen);
cout<<"Server: Server's Port: "<< ntohs(servaddr.sin_port)<<endl; /*23112*/
cout<<"Server: Client's Port: "<< ntohs(cliaddr.sin_port)<<endl; /*23112*/
我在客户端程序中使用相同的,它正确打印随机端口。 我用这种方式初始化了它们:
struct sockaddr_in cliaddr, servaddr;
socklen_t clilen = sizeof(cliaddr);
答案 0 :(得分:1)
您需要初始化'clilen':
addrlen参数是一个value-result参数:调用者必须 初始化它以包含指向的结构的大小(以字节为单位) 通过addr;返回时它将包含对等体的实际大小 地址。