2016-06-18 3 views
0

У меня есть этот конструктор класса в C++:клиент не может подключиться к программе сервера в локальной сети

SocketServer::SocketServer(int port) 
{ 
    this->port=port; 

WSAStartup(MAKEWORD(2,0), &WSAData); 
server = socket(AF_INET, SOCK_STREAM, 0); 

addr.sin_addr.s_addr = htonl(INADDR_ANY); 
addr.sin_family = AF_INET; 
addr.sin_port = htons(port); 

bind(server, (SOCKADDR *)&addr, sizeof(addr)); 
} 

Клиентское приложение с портом нет. 5555 не может подключиться к серверной программе на другом ПК в локальной сети. Я пробовал другой порт. слишком. Как это решить? Сообщение об ошибке:

Error while connecting 

: Это client.cpp:

#include <iostream> 
#include <fstream> 
#include "SocketClient.h" 

using namespace std; 

void onError(errorStruct *e) 
{ 
    cout << e->message << endl; 
} 

int main() 
{ 
    int port; 
    cout<<"Enter a port : "; 
    cin>>port; 
    SocketClient client("127.0.0.1", port); 
    client.setErrorCallback(onError); 
    client.connect(); 

string str; 
while(1) 
{ 
    cout << ">"; 
    getline(cin, str); 
    client.send(str); 
} 

client.close(); 
} 

Edit 2: SocketClient

SocketClient::SocketClient(std::string ip, int port) 
{ 
    this->ip=ip; 
    this->port=port; 
    this->connected=false; 
    initParameters(); 
    initSocket(ip, port); 
} 

void SocketClient::initSocket(std::string ip, int port) 
{ 
    WSAStartup(MAKEWORD(2,0), &WSAData); 
    this->socket = WINSOCK_API_LINKAGE::socket(AF_INET, SOCK_STREAM, 0); 
    this->addr.sin_addr.s_addr = inet_addr(ip.c_str()); 
    this->addr.sin_family = AF_INET; 
    this->addr.sin_port = htons(port); 
} 

void SocketClient::initParameters() 
{ 
    this->bytes_for_package_size=16; 
    this->size_of_packages=2048; 
    this->callback=NULL; 
    this->callbackError=NULL; 
    this->thread_started=false; 
    this->errorWhileReceiving=false; 
    this->errorWhileSending=false; 
} 
+0

Я рекомендую переместить вызов на WSAStartup из конструктора класса и в 'main()', прежде чем вы начнете создавать серверы или клиенты. Таким образом, если у вас есть несколько копий одного и того же класса, вы не будете повторно инициализировать WinSock каждый раз. –

ответ

0

Я предполагаю, что ваша система работает нормально, если сервер и клиент оба на той же машине?

В коде клиента у вас есть линия

SocketClient client("127.0.0.1", port); 

Вы не дали код SocketClient, но я предполагаю, что это адрес и порт сервера? Если это так, то ваша проблема в том, что вам нужно указать IP-адрес сервера: 127.0.0.1 is localhost, или это компьютер.

+0

Он работает отлично на той же машине. Я не знаю, что писать на 127.0.0.1? Я попробовал ipv4-адрес программы, работающей на компьютере, но это не сработало. Я также пробовал адрес модема (с которым оба компьютера подключены), который равен 192.168.1.1, но он снова не работает. – dlpsankhla

+0

Вы должны использовать IP-адрес сервера, а не модем/маршрутизатор. Это _server_, который прослушивает порт 5555, а не модем/маршрутизатор. Вероятно, ваш брандмауэр на сервере не позволяет слушать. Проверь это. –

+0

Детали вопроса редактируются! Как получить IP-адрес сервера? Извините, я новичок в программировании сокетов. – dlpsankhla

Смежные вопросы