C++ TCP recvfrom()不';t商店';从';

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_

我正在使用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_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