如何在winsock中不绑定套接字的情况下接收数据
how to receive data with out binding the socket in winsock
我有一个应用程序将数据发送到我的'localhost'/'127.0.0.1'或任何ip到特定端口'5000'。此端口已被占用。如果我想查看在'5000'端口发送了哪些数据。
为此我编写了一个客户端应用程序,如下所示:int _tmain(int argc, _TCHAR* argv[]){
cout<<"n Hi "<<endl;
WSAData wsd;
if(WSAStartup(MAKEWORD(2,2),&wsd)!=0)
{
cout<<"n WSA Failed : "<<endl;
return 0;
}
SOCKET sock;
int bytesRecv;
char recvBuf[1024]="Hello";
sock=socket(AF_INET,SOCK_DGRAM,0);
if(sock==SOCKET_ERROR)
{
cout<<"n Socket Creation Failed"<<endl;
return 0;
}
SOCKADDR_IN client;
int clientAddrSize=sizeof(client);
client.sin_family=AF_INET;
client.sin_addr.s_addr=inet_addr("127.0.0.1");
client.sin_port=htons(5000);
if(connect(sock,(SOCKADDR *)&client,sizeof(client))==SOCKET_ERROR)
{
cout<<"n Connection Failed "<<endl;
wprintf(L"Connection Failed %d",WSAGetLastError());
}
else
{
cout<<"n Connection Established "<<endl;
}
while(sock!=SOCKET_ERROR)
{
//memset(recvBuf,' ',1024);
bytesRecv=recvfrom(sock,recvBuf,50,0,(SOCKADDR *)&client,&clientAddrSize);
if (bytesRecv == SOCKET_ERROR)
{
wprintf(L"sendto failed with error: %dn", WSAGetLastError());
closesocket(sock);
WSACleanup();
return 1;
//while(1);
}
puts(recvBuf);
cout<<"n "<<bytesRecv<<endl;
cout<<"n Sent Buffer : "<<recvBuf<<endl;
while(1);
}
system("pause");
return 0;
}
在'bytesRecv=recvfrom(sock,recvBuf,50,0,(SOCKADDR *)&client,&clientAddrSize);'之前工作正常。它既不抛出任何WSAGetLastError,也不给出接收到的字节数。可能的原因是什么?如何使这个程序工作,并看到数据传输到我的本地主机在5000端口。
如何使我的客户端程序在同一位置接收数据,因为我的服务器正在发送数据在那个位置
您对套接字有一个基本的误解。如果端口已经被占用,你就不能用你的程序接收它的数据。这没有任何意义,如果你能做到的话,将会是一个巨大的安全问题。
如果你想看到进入其他程序的数据,你需要一个像Wireshark这样的网络嗅探器。
相关文章:
- 如何在没有数据拷贝的情况下从指针创建一个Eigen VectorXd对象
- QT QOpenGLWidget:如何在不使用数据块复制的情况下修改VBO中的单个顶点值?
- 如何在不破坏现有应用程序的情况下更改 API 中 stl 容器的数据类型?
- 在 C++ 中,默认情况下构造函数为类的数据成员提供的值是多少?
- 在不复制数据的情况下,将double数组转换为只有double成员的structs数组
- 有没有一种方法可以在不复制数据的情况下从string_view创建字符串流
- 串行读取()不会在没有数据接收的情况下返回值
- 如何在不复制数据的情况下将 cv::Mat 转换为 2d 标准::矢量
- 如何在没有缓冲的情况下使用 parquet-cpp 写入面向流/行的数据?
- 在不编写显式 setter 的情况下修改私有类数据成员的便捷方法是什么?模板有用吗?
- 在不减慢线程速度的情况下保存大量数据
- 如何对 int 变量应用验证,使其仅接受整数数据,并且在任何其他数据的情况下不会出错?
- 如何在没有性能命中的情况下抽象SIMD代码来处理不同的数据类型
- 是否可以在不分配内存或复制数据的情况下构造对象?
- 如何在不复制数据的情况下在平面数组和多维数组之间进行转换?
- 对象无法访问其私人数据.错误:在这种情况下私有
- 如何在不重写整个视频文件的情况下仅替换流中的一个数据框架?(ffmpeg)
- 给定一个填充无符号字符**的 C 函数,如何在没有中间副本的情况下用数据填充 std::vector
- 为什么在以下情况下没有数据竞争
- 在不复制数据的情况下更改 opencv mat 中的列顺序