c++ - c ++ udp服务器不接收数据包
问题描述
我用 Java 客户端用 C++ 编写了一个 UDP 接收器。
客户端的接收器 IP(C++ 服务器)设置192.168.1.xxx
为服务器和客户端位于不同设备上的专用网络中。
一切正常。
在另一方面。我有一个 3ds Max 插件,它分叉一个线程来做一些异步的事情。问题是当我在该线程中运行提到的 C++ 服务器代码时,它什么也没有收到。
线程是否在无法访问的本地环境中运行192.168.1.xxx
?
maxsdk C++ 部分
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 服务器
#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;
}
解决方案
推荐阅读
- swiftui - 无法使用结合 SwiftUI 从 URL 获取响应
- perl - 如何在 List::Util 中使用与 sort 或 reduce 相同的签名编写子代码
- python - 更改值中的特定位
- powershell - powershell decode gzip stream 编码字符串
- json - Azure 中从 API 到 SQL 的平面 JSON
- makefile - 当 SHELL 包含包含时,make 命令返回根文件夹而不是 WSL2 中的当前文件夹
- javascript - 如何使用 Google Apps 脚本在 Charts Service 中生成带有甜甜圈洞的 3D 图表?
- python - python json从找到的元素中捕获整个节点
- java - Springboot javax验证不起作用
- bash - Python子进程check_call:如何将非0退出代码分配给变量而不是引发异常?