2014-05-23 22 views
-3

我有一个将数据发送到我的'localhost'/'127.0.0.1'或任何ip到特定端口'5000'的应用程序。这个端口已经被占用了。如果我想查看哪些数据已在'5000'端口发送。如何通过在winsock中绑定套接字来接收数据

此我写了一个客户端应用程序如下:

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; 

}

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

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

回答

0

你对套接字有一个基本的误解。如果端口已被占用,则无法通过程序接收数据。这没有任何意义,如果你能做到这一点,将会是一个巨大的安全问题。

如果你想看到另一个程序的数据,你需要像Wireshark这样的网络嗅探器。

+0

Wireshark如何获取这些数据并显示给我们。我想获取这些数据并将其用于某些其他应用程序 – Srinivas

相关问题