gpt4 book ai didi

c++ - 在服务器上挂接 WSASend/WSARecv 时套接字无效

转载 作者:太空宇宙 更新时间:2023-11-04 14:20:21 24 4
gpt4 key购买 nike

我在 C++ 中挂接 WSASend 和 WSARecv,使用的方法与我用来挂接客户端的 WSASend 和 WSARecv 函数的方法相同。在客户端中,我能够从 WSASend/WSARecv 传递的 SOCKET 结构中获取 IP、端口和套接字;但是,对于服务器,当我尝试使用 getpeername 或 getsockname() 时,它们都返回错误 10057(套接字未连接)...

我相当确定服务器上的钩子(Hook)是正确的,因为它成功地打印了字节,而且我也确定套接字应该有效,看看客户端和服务器如何建立成功的连接。

有没有其他方法可以解决这个问题?我一直在网上寻找解决方案,但没有看到任何人遇到同样的问题。

我已经试过了:

            sockaddr *address = new sockaddr;
int peer_len;
getpeername(s, address, &peer_len);
int err = WSAGetLastError();
if(err==0)
{
char *Str = inet_ntoa(((sockaddr_in*)address)->sin_addr);
printf("[%s", Str);
printf(":%d]",ntohs(((sockaddr_in*)address)->sin_port));
}
else
{
printf("Error %i\n",err);
}

(同时使用 getpeername 和 getsockname)两者都会导致相同的套接字未连接错误。

我计划使用 C++ dll 获取的数据包并将信息转发给 C# dll,因为这样管理起来更容易(无论如何对我来说),但我需要用它来区分每个数据包套接字 ID。

最佳答案

您只能在已连接的套接字 上执行此操作,即从 accept() 调用返回的套接字,而不是在监听的“服务器”套接字上。

关于c++ - 在服务器上挂接 WSASend/WSARecv 时套接字无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8114422/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com