How do you connect more than one device?
I can connect to one device using SOCKETS (winsock2.h) and talk to it via TCP but when I try to connect to another device while the first device is connected, I get connected and talks but eventually will crash.
First connected source code:
void CIPtestDlg::OnConnectToSocket()
{
char MyIPaddress[16];// = {"192.168.2.50"};
char PortNumb[16], ClientPort[16];
int 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);
if(strlen(ClientPort)==0 ||strlen(PortNumb)==0 || strlen(MyIPaddress) < 6)
{
AfxMessageBox("Please fill in Port Number or Client Port Number or IP Address");
return;
}
ClientportNumb = atoi(ClientPort);
int error = WSAStartup (0x0202, &w); // Fill in WSA info
ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (ConnectSocket == INVALID_SOCKET)
{
AfxMessageBox( "Failed to connect.\n",MB_OK,0 );
WSACleanup();
return;
}
clientService.sin_family = AF_INET;
clientService.sin_addr.s_addr = inet_addr( MyIPaddress );
clientService.sin_port = htons( ClientportNumb );
SenderAddrSize = sizeof(clientService);
if( connect( ConnectSocket, (SOCKADDR *)&clientService, sizeof(clientService)) == SOCKET_ERROR)
{
AfxMessageBox( "Failed to connect.\n",MB_OK,0 );
WSACleanup();
return;
}
AfxMessageBox("Connected to server.\n", MB_OK, 0);
m_ctlIsConnected.SetCheck(TRUE);
return;
}
The 2nd connect is just like the first except some variables have been changed:
void CIPtestDlg::OnBnClickedConnect2()
{
char MyIPaddress[16];
char PortNumb[16], ClientPort[16];
int 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);
if(strlen(ClientPort)==0 ||strlen(PortNumb)==0 || strlen(MyIPaddress) < 6)
{
AfxMessageBox("Please fill in Port Number and/or IP Address");
return;
}
ClientportNumb = atoi(ClientPort);
int error = WSAStartup (0x0202, &w2); // Fill in WSA info
ConnectSocket2 = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (ConnectSocket2 == INVALID_SOCKET)
{
AfxMessageBox( "Failed to connect.\n",MB_OK,0 );
WSACleanup();
return;
}
// The sockaddr_in structure specifies the address family,
// IP address, and port of the server to be connected to.
clientService2.sin_family = AF_INET;
clientService2.sin_addr.s_addr = inet_addr( MyIPaddress );
clientService2.sin_port = htons( ClientportNumb );
SenderAddrSize2 = sizeof(clientService2);
if( connect( ConnectSocket2, (SOCKADDR *)&clientService2, sizeof(clientService2)) == SOCKET_ERROR)
{
AfxMessageBox( "Failed to connect.\n",MB_OK,0 );
WSACleanup();
return;
}
AfxMessageBox("Connected to server.\n", MB_OK, 0);
m_ctlIsConnected2.SetCheck(TRUE);
return;
}
This is only a test program but one variable I could not cast or duplicate to a different name was "socket( AF_INET, SOCK_STREAM, IPPROTO_TCP)"
any clues out there?
Thanks for reading,
Craig C.
What I have tried:
I have tried to duplicate functions by casting and changing names as not to interfere with each other.