如何在winsock中不绑定套接字的情况下接收数据

how to receive data with out binding the socket in winsock

本文关键字:情况下 数据 套接字 绑定 winsock      更新时间:2023-10-16

我有一个应用程序将数据发送到我的'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这样的网络嗅探器。

相关文章: