C++, можете ли вы подключить несколько IP-подключенных устройств?
Как подключить более одного устройства?
Я могу подключиться к одному устройству с помощью сокетов (winsock2. h) и разговаривать с ним через TCP, но когда я пытаюсь подключиться к другому устройству, пока первое устройство подключено, я подключаюсь и разговариваю, но в конечном итоге терплю крах.
Первый подключенный исходный код:
void CIPtestDlg:: OnConnectToSocket()
{
char MyIPaddress[16];// = {"192.168.2.50"};
char PortNumb[16], ClientPort[16];
инт ClientportNumb;
функцию memset(MyIPaddress,0,16);
функцию memset(PortNumb,0,16);
memset(ClientPort, 0, 16);
m_ctlIPAddress.GetWindowText(MyIPaddress, 16);
m_ctlPortNumber.GetWindowTextA(PortNumb, 5);
m_ctlClientPort. GetWindowTextA(ClientPort, 6);
если(функция strlen(клиентского порта)==0 ||функция strlen(PortNumb)==0 || функция strlen(MyIPaddress) &ЛТ; 6)
{
AfxMessageBox ("пожалуйста, заполните номер порта или номер порта клиента или IP-адрес");
вернуть;
}
ClientportNumb = atoi(ClientPort);
int error = WSAStartup (0x0202, & w); / / заполните информацию WSA
ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (ConnectSocket == INVALID_SOCKET)
{
AfxMessageBox ("не удалось подключиться.\n", MB_OK, 0 );
WSACleanup();
вернуть;
}
клиента.значение переменной sin_family = равен af_inet;
clientService.sin_addr. s_addr = inet_addr( MyIPaddress );
clientService. sin_port = htons( ClientportNumb );
SenderAddrSize = sizeof(clientService);
если( подключение( ConnectSocket, (структуры *)&ампер;клиента, оператор sizeof(клиента)) == с socket_error)
{
AfxMessageBox ("не удалось подключиться.\n", MB_OK, 0 );
WSACleanup();
вернуть;
}
AfxMessageBox ("подключен к серверу.\n", MB_OK, 0);
m_ctlIsConnected.SetCheck (TRUE);
вернуть;
}
2-е соединение точно такое же, как и первое, за исключением того, что некоторые переменные были изменены:
void CIPtestDlg:: OnBnClickedConnect2()
{
char MyIPaddress[16];
char PortNumb[16], ClientPort[16];
инт ClientportNumb;
функцию memset(MyIPaddress,0,16);
функцию memset(PortNumb,0,16);
memset(ClientPort, 0, 16);
m_ctlIPAddress2. GetWindowText(MyIPaddress, 16);
m_ctlPortNumber2. GetWindowTextA(PortNumb, 5);
m_ctlClientPort. GetWindowTextA(ClientPort, 6);
если(функция strlen(клиентского порта)==0 ||функция strlen(PortNumb)==0 || функция strlen(MyIPaddress) &ЛТ; 6)
{
AfxMessageBox ("пожалуйста, заполните номер порта и / или IP-адрес");
вернуть;
}
ClientportNumb = atoi(ClientPort);
int error = WSAStartup (0x0202, & w2); / / заполните информацию WSA
ConnectSocket2 = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (ConnectSocket2 == INVALID_SOCKET)
{
AfxMessageBox ("не удалось подключиться.\n", MB_OK, 0 );
WSACleanup();
вернуть;
}
// Структура sockaddr_in определяет семейство адресов,
// IP-адрес и порт сервера, к которому необходимо подключиться.
clientService2.значение переменной sin_family = равен af_inet;
clientService2.sin_addr. s_addr = inet_addr( MyIPaddress );
clientService2.sin_port = htons( ClientportNumb );
SenderAddrSize2 = sizeof(clientService2);
если( подключение( ConnectSocket2, (структуры *)&ампер;clientService2, оператор sizeof(clientService2)) == с socket_error)
{
AfxMessageBox ("не удалось подключиться.\n", MB_OK, 0 );
WSACleanup();
вернуть;
}
AfxMessageBox ("подключен к серверу.\n", MB_OK, 0);
m_ctlIsConnected2.SetCheck(правда);
вернуть;
}
Это всего лишь тестовая программа, но одна переменная, которую я не мог привести или дублировать на другое имя, была " socket( AF_INET, SOCK_STREAM, IPPROTO_TCP)"
есть какие-нибудь зацепки?
Спасибо за чтение,
Крейг К.
Что я уже пробовал:
Я пытался дублировать функции, бросая и меняя имена, чтобы не мешать друг другу.