C++ TCP recvfrom()不';t商店';从';
我正在使用TCP制作一个服务器程序,我想得到我刚刚收到的消息的发送者的IP地址。这是我的密码:C++ TCP recvfrom()不';t商店';从';,c++,tcp,ip-address,recv,C++,Tcp,Ip Address,Recv,我正在使用TCP制作一个服务器程序,我想得到我刚刚收到的消息的发送者的IP地址。这是我的密码: case FD_READ: { //Incoming data; get ready to receive char buffer[DEFAULT_BUFLEN]; int bytes_received; memset(buffer, '\0', sizeof(buffer)); struct sockaddr_in recvIn; int recv_
case FD_READ:
{ //Incoming data; get ready to receive
char buffer[DEFAULT_BUFLEN];
int bytes_received;
memset(buffer, '\0', sizeof(buffer));
struct sockaddr_in recvIn;
int recv_length = sizeof(struct sockaddr);
memset((void *)&recvIn, '\0', recv_length);
bytes_received = recvfrom(wParam, buffer, DEFAULT_BUFLEN, 0, (struct sockaddr *)&recvIn, &recv_length);
cout << inet_ntoa(recvIn.sin_addr) << "\n";
break;
}
case FD\u读取:
{//传入数据;准备接收
字符缓冲区[默认值];
接收到的int字节;
memset(缓冲区,'\0',sizeof(缓冲区));
recvIn中的结构sockaddr_;
int recv_length=sizeof(结构sockaddr);
memset((void*)和recvIn,'\0',recv_长度);
接收的字节数=recvfrom(wParam、buffer、DEFAULT\u BUFLEN、0、(struct sockaddr*)和recvIn以及recv\u length);
cout对于已连接的TCP套接字,您应该使用来获取远程套接字的地址。TCP是一种面向连接的协议。from
和fromlen
用于无连接协议,如UDP。根据,recvfrom
忽略from
和fromlen
用于conn面向接口的套接字。我还想知道,为什么fromlen(recvfrom的最后一个参数)会需要是指针,为什么不仅仅是数字本身?它似乎毫无意义。它需要是指针,因为这些API编写时考虑到了未来的扩展。您可以给它一些非描述缓冲区并传入其长度,它将填充缓冲区,直到结构的当前大小,并用实际长度填充长度指针已使用。struct sockaddr\u in recvIn;int recv_length=sizeof(struct sockaddr);
可疑:您没有将sizeof
应用于要传递的结构类型。您是否尝试过更接近文档中示例的代码?()?@Joãomedes是的,它是基于连接的套接字(它是TCP)这就是问题所在!谢谢:b但是当多重连接到我的服务器(这是应该发生的事情)时,我如何知道哪些数据对应于哪个客户端?为了补充答案,函数的MSDN文档链接在这里:非常感谢!^^这正是我需要的:D