如何在winsock中绑定套接字来接收数据

时间:2014-05-23 11:56:35

标签: c++

我有一个应用程序将数据发送到我的本地主机' /' 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,'\0',1024);

    bytesRecv=recvfrom(sock,recvBuf,50,0,(SOCKADDR *)&client,&clientAddrSize);




    if (bytesRecv == SOCKET_ERROR) 
    {
    wprintf(L"sendto failed with error: %d\n", 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;

}

它正常工作直到&#39; bytesRecv = recvfrom(sock,recvBuf,50,0,(SOCKADDR *)&amp; client,&amp; clientAddrSize);&#39;。它既没有抛出任何WSAGetLastError,也没有给出接收的字节数。可能的原因是什么?如何使这个程序工作,并看到在5000端口传输到我的localhost的数据。

如何让我的客户端程序在我的服务器在该位置发送数据的同一位置接收数据。

1 个答案:

答案 0 :(得分:0)

您对套接字有基本的误解。如果端口已被占用,您可以使用您的程序在其上接收数据。这没有任何意义,如果你能做到这将是一个巨大的安全问题。

如果您想查看转到其他程序的数据,您需要像Wireshark这样的网络嗅探器。