1
我想創建一個連接到我提供的服務器/端口 - 在進行連接時,我能夠發送它的ping數據包(至少我想我能,因爲發送()似乎返回正確的字節數),但是當我嘗試的recv()之後,調用失敗說連接拒絕Recv(),而發送似乎工作正常
"Error on Receiving .. Connection Refused"
爲什麼發送是否有任何想法不是給錯誤,但recv會?以下是導致我的失敗的代碼的一部分 - 它運行在它自己的線程上。 TCP連接是在另一個線程上完成的,並且該套接字描述符被傳遞給了這個套接字描述符(下面稱爲m_sockfd)。
void ConnectionManager::operator()()
{
int rc = 0, numBytes=0 ;
char reply[256] ;
// Send a ping
char PingPacket[23] ;
PreparePingPacket(PingPacket) ;
numBytes = send(m_sockfd,PingPacket,23,0);
if(numBytes == -1)
{
fprintf(stderr, "Error on Sending Ping .. \n") ;
return ;
}
if(numBytes < 23)
{
fprintf(stderr, "Didn't send the whole Ping Request .. %d \n", numBytes) ;
}
numBytes = recv(m_sockfd, reply, 256, 0) ;
if(numBytes == -1)
{
fprintf(stderr, "Error on Receiving .. %s \n", strerror(errno)) ;
return ;
}
ParsePacket(reply, rc) ;
}
我可以貼上我的代碼來完成實際的連接,但我想,如果它有錯誤,然後發送就永遠不會走過來開始?
感謝您的閱讀 - 任何幫助讚賞!
使用WSAGetLastError()獲取Winsock錯誤代碼,然後使用[Microsoft](http://msdn.microsoft.com/en-us/library/windows/desktop/ms741580(v = vs.85).aspx)看看它是什麼意思。 – Serdalis
我在我大學的服務器上運行我的代碼,它的工作完美無缺 - 看起來我只是在家裏遇到這個問題。我曾使用端口轉發來指示所有到達特定端口的流量 - 並確認通過確保傳入連接能夠通過,但不知道爲什麼recv()發出61 /拒絕連接。 –