Я написал приемник UDP на C ++ с клиентом Java.
IP-адрес получателя клиента (сервер C ++) установлен как 192.168.1.xxx
, поскольку сервер и клиент находятся в частной сети на разных устройствах.
Все работает просто отлично.
С другой стороны.У меня есть плагин 3ds Max, который разветвляет поток, чтобы сделать некоторые асинхронные вещи.Проблема в том, что когда я запускаю упомянутый код сервера C ++ в этом потоке, он ничего не получает.
Работает ли поток в локальной среде, которая не может получить доступ к 192.168.1.xxx
?
maxsdk C ++ part
void InitWinsock()
{
WSADATA wsaData;
WSAStartup(MAKEWORD(2, 2), &wsaData);
}
void update_state(Interface* ip)
{
SOCKET socketS;
InitWinsock();
struct sockaddr_in local;
struct sockaddr_in from;
int fromlen = sizeof(from);
local.sin_family = AF_INET;
local.sin_port = htons(12345);
local.sin_addr.s_addr = inet_addr("192.168.1.106");
socketS = socket(AF_INET, SOCK_DGRAM, 0);
bind(socketS, (sockaddr*)&local, sizeof(local));
char buffer[1024];
while (1)
{
ZeroMemory(buffer, sizeof(buffer));
if (recvfrom(socketS, buffer, sizeof(buffer), 0, (sockaddr*)&from, &fromlen) != SOCKET_ERROR)
{
printf("Received message from %s: %s\n", inet_ntoa(from.sin_addr), buffer);
ip->PushPrompt((wchar_t*)buffer);
//sendto(socketS, buffer, sizeof(buffer), 0, (sockaddr*)&from, fromlen);
}
Sleep(50);
}
closesocket(socketS);
return;
}
void PCamMaxPlugin::BeginEditParams(Interface* ip,IUtil* iu)
{
this->iu = iu;
hPanel = ip->AddRollupPage(
hInstance,
MAKEINTRESOURCE(IDD_PANEL),
DlgProc,
GetString(IDS_PARAMS),
0);
thread (update_state, ip).detach();
ip->PushPrompt(_M("----"));
}
C ++ udp server
#include <winsock.h>
#include <cstdio>
#pragma comment(lib, "Ws2_32.lib")
void InitWinsock()
{
WSADATA wsaData;
WSAStartup(MAKEWORD(2, 2), &wsaData);
}
int main()
{
SOCKET socketS;
InitWinsock();
struct sockaddr_in local;
struct sockaddr_in from;
int fromlen = sizeof(from);
local.sin_family = AF_INET;
local.sin_port = htons(12345);
local.sin_addr.s_addr = inet_addr("192.168.1.106");
socketS = socket(AF_INET, SOCK_DGRAM, 0);
bind(socketS, (sockaddr*)&local, sizeof(local));
char buffer[1024];
while (1)
{
ZeroMemory(buffer, sizeof(buffer));
if (recvfrom(socketS, buffer, sizeof(buffer), 0, (sockaddr*)&from, &fromlen) != SOCKET_ERROR)
{
printf("Received message from %s: %s\n", inet_ntoa(from.sin_addr), buffer);
//sendto(socketS, buffer, sizeof(buffer), 0, (sockaddr*)&from, fromlen);
}
Sleep(50);
}
closesocket(socketS);
return 0;
}