Я использую winsocket и winapi для разработки "месседжера". И send() из winsocket не работает с GetWindowText(). Вот код:
GUI(при нажатии на кнопку отправляется сообщение введенное в obj.hEDIT)
case ID_BUTTON3:
{
char ip[32] = "127.0.0.1";
client(ip, 1111, obj.hWnd);
CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)CMH,NULL, NULL, NULL);
break;
}
client:
#pragma comment(lib, "ws2_32.lib")
#pragma warning(disable: 4996)
#include <WinSock2.h>
#include <iostream>
#include <windows.h>
SOCKET hconnect;
int client(char ip[32], int port, HWND hwnd)
{
WSADATA wsa;
WORD DLLVersion = MAKEWORD(2, 1);
if (WSAStartup(DLLVersion, &wsa) != 0)
{
//std::cout << "Error 1" << std::endl;
exit(1);
}
SOCKADDR_IN addr;
int sizeaddr = sizeof(addr);
addr.sin_addr.s_addr = inet_addr(ip);
addr.sin_port = htons(port);
addr.sin_family = AF_INET;
SOCKET conect = socket(AF_INET,SOCK_STREAM, NULL);
if (connect(conect, (SOCKADDR*)&addr, sizeof(addr)) != 0)
{
//std::cout << "Error 1" << std::endl;
return 1;
}
//std::cout << "Connected!\n";
char msg[256];
hconnect = conect;
return 0;
}
char* clienthandler()
{
char msg[256];
recv(hconnect, msg, 256, NULL);
return msg;
}
int servermessage(char msg[256])
{
send(hconnect, msg, 256, NULL);
return 0;
}
Server:
#include <iostream>
#pragma comment(lib, "ws2_32.lib")
#pragma warning(disable: 4996)
#include <WinSock2.h>
SOCKET connectn[32];
int Counter = 0;
void ClientHandler(int index)
{
char msg[256];
while (true) {
recv(connectn[index], msg, sizeof(msg), NULL);
std::cout << msg << std::endl;
for (int i = 0; i < Counter; i++)
{
if (i == index) {
continue;
}
send(connectn[index], msg, sizeof(msg), NULL);
}
}
}
int main()
{
WSADATA wsa;
WORD DLLVersion = MAKEWORD(2, 1);
if (WSAStartup(DLLVersion, &wsa) != 0)
{
std::cout << "Error 1" << std::endl;
return 1;
}
int port;
char ip[32];
//127.0.0.1
//1111
std::cout << "ip: ";
std::cin >> ip;
std::cout << "port: ";
std::cin >> port;
SOCKADDR_IN addr;
int sizeaddr = sizeof(addr);
addr.sin_addr.s_addr = inet_addr(ip);
addr.sin_port = htons(port);
addr.sin_family = AF_INET;
SOCKET sListen = socket(AF_INET, SOCK_STREAM, NULL);
bind(sListen, (SOCKADDR*)&addr, sizeof(addr));
listen(sListen, SOMAXCONN);
SOCKET nConect;
for (int i = 0; i < 32; i++)
{
nConect = accept(sListen, (SOCKADDR*)&addr, &sizeaddr);
if (nConect == 0)
{
std::cout << "Error 2" << std::endl;
return 1;
}
else
{
std::cout << "Client Connected!\n";
connectn[i] = nConect;
Counter++;
CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)ClientHandler, (LPVOID)i, NULL, NULL);
}
}
char b;
std::cin >> b;
return 0;
}