請,這是我第一次嘗試使用套接字進行編程。我使用C++ MFC工作,並試圖讓應用程序通過其TCP/IP地址與視頻服務器控制器進行通信。第一次使用套接字進行編程。連接沒有發生。
我做了所有的第一步沒有錯誤。我創建一個套接字,我調用bind()
函數來關聯地址,但是當我嘗試連接它時不起作用。
我不知道如果我做錯了什麼,所以我把我的代碼的一部分下面。
struct sockaddr_in my_addr;
int lenAddrs;
b1 = 192;
b2 = 168;
b3 = 11;
b4 = 2;
remoteAddress.Format("%u.%u.%u.%u", b1, b2, b3, b4);
port = (u_short)(portNumber);
// my address
memset(&my_addr, 0, sizeof(my_addr));
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(port);
lenAddrs = sizeof(my_addr);
// remote address
memset(&remote_addr, 0, sizeof(remote_addr));
remote_addr.sin_family = AF_INET;
remote_addr.sin_port = port;
inet_pton(AF_INET, remoteAddress, (&remote_addr.sin_addr));
// socket
sckSloMo = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sckSloMo == INVALID_SOCKET)
{
AfxMessageBox("sckSloMo is invalid!!");
return;
}
if (sckSloMo != SOCKET_ERROR)
{
ret = bind(sckSloMo, (const sockaddr*) &my_addr, sizeof(my_addr));
if (ret == 0)
{
ret = connect(sckSloMo, (const sockaddr*) &remote_addr, sizeof(remote_addr));
if (ret == 0)
{
AfxMessageBox("connect!");
StartSendingMessages();
}
else
{
AfxMessageBox("connect error!!!");
return;
}
}
}
如果有人能幫助我,我會很高興。
您在'bind'和'connect'中使用相同的'sockaddr'結構。這沒有任何意義。通常,不會在客戶端套接字上調用「bind」。在'connect'中,您將要連接的服務器地址**傳遞給**。我沒有看到你在哪裏拼出目標IP地址。 –
你不需要使用'bind'。看看[MSDN文檔連接](http://msdn.microsoft.com/en-us/library/windows/desktop/ms737625(v = vs.85).aspx)。如果你在'connect'不起作用時提供'WSAGetLastError()'的結果會有所幫助。 – ajcaruana