Saya mencoba menghubungkan klien dengan server. Dengan alamat lokal (127.0.0.1) semuanya berfungsi dengan baik, tetapi ketika saya mencoba menggunakan alamat jarak jauh saya, tidak berhasil. Saya mencari benda ini di seluruh internet tetapi saya tidak dapat menemukan apa pun.
Sisi server:
bool start_server()
{
int i = 1;
if(WSAStartup(MAKEWORD(2,0),&WsaDat) != 0)
{
cout << "WSA error!" << endl;
system("pause");
return FALSE;
}
if ( LOBYTE( WsaDat.wVersion ) != 2 || HIBYTE( WsaDat.wVersion ) != 0 )
{
cout << "Bad version of winsocket" << endl;
system("pause");
WSACleanup();
return 0;
}
serwer = socket(AF_INET, SOCK_STREAM, 0);
if(serwer == INVALID_SOCKET)
{
cout << "Can't create socketa!" << endl;
system("pause");
WSACleanup();
return 0;
}
int port;
cout << "Port input " << endl;
cin >> port; // 13056
SOCKADDR_IN SockAddr;
SockAddr.sin_port = htons(port);
SockAddr.sin_family = AF_INET;
SockAddr.sin_addr.s_addr = INADDR_ANY;
setsockopt( serwer, SOL_SOCKET, SO_REUSEADDR, ( char * ) &i, sizeof ( i ) );
if(bind(serwer,(SOCKADDR *)(&SockAddr), sizeof(SockAddr)) == SOCKET_ERROR)
{
cout << "Couldn't bind socket" << endl;
system("pause");
WSACleanup();
return 0;
}
for(int i = 0; i < MAX_CLIENTS; i++)
client[i].connected = FALSE;
if(listen(serwer,SOMAXCONN)==SOCKET_ERROR)
{
cout << "Listening error!" << endl;
system("pause");
WSACleanup();
return 0;
}
cout << "Serwer created!" << endl;
unsigned long b = 0;
ioctlsocket ( serwer, FIONBIO, &b );
return 1;
}
Setelah ini saya menerima fungsi pada program mana yang memblokir:
accept(serwer,(SOCKADDR *)(¤t_client->address),¤t_client->address_length);
Sisi klien:
bool start_client()
{
WSADATA WsaDat;
if(WSAStartup(MAKEWORD(2,0),&WsaDat) != 0)
cout << "WSA error!\n";
if ( LOBYTE( WsaDat.wVersion ) != 2 || HIBYTE( WsaDat.wVersion ) != 0 )
{
cout << "Wrong version of winsocket\n";
WSACleanup();
return false;
}
SOCKET Klient;
Klient = socket(AF_INET, SOCK_STREAM, 0);
if(Klient == INVALID_SOCKET)
{
cout << "Can't create socket socketa!\n";
WSACleanup();
return false;
}
SOCKADDR_IN SockAddr;
SockAddr.sin_port = htons(PORT); // 13056
SockAddr.sin_family = AF_INET;
SockAddr.sin_addr.S_un.S_addr = inet_addr("*********"); // my remote address
while(connect(Klient, (SOCKADDR *)(&SockAddr), sizeof(SockAddr)) != 0)
{
cout << "Trying to connect " << WSAGetLastError() << "\n";
Sleep(500);
}
cout << "Connected!\n";
}
Saya telah menambahkan aplikasi klien dan server ke aturan firewall dan saya juga mencoba menghubungkannya pada beberapa port. Sisi server pasti mendengarkan (di sini, di port berbeda):
WSAGetLastError()
ketikaconnect()
gagal? - person Remy Lebeau   schedule 03.05.2013