套接字 UDP - 程序在接收处停止
Socket UDP- Program stops at recvfrom
我尝试通过UDP将数据从一台计算机发送到另一台计算机(第一台计算机:Ubuntu,C++使用Eclipse,第二台计算机Windows 10 Matlab 2014b)。C++计算机应用作服务器。将数据从C++发送到 Matlab 工作正常,但我无法以相反的方向发送数据。每次我的C++程序到达 recvfrom() 时,它都会在这一点上空闲而不做任何事情,即使 matlab 一遍又一遍地发送数据。我尝试通过netcat在ubuntu上接收数据,同时使用Matlab发送软件包,这也很好用。即使我尝试了 select() 的一些东西,但这只导致当程序到达 select() 时等待 10 秒,然后再次在 recvfrom 处冻结。如果有人能给我一些帮助,我将不胜感激。
int Socket=socket(AF_INET, SOCK_DGRAM,0);
/*FD_ZERO(&SockSet);
FD_SET(Socket,&SockSet);
sTimeval.tv_sec=0.1;
sTimeval.tv_usec=0;
int status=select(Socket+1,&SockSet,(fd_set*)NULL,(fd_set *)NULL,&sTimeval);
cout<<status<<endl;*/
if(Socket!=-1)
cout<<"Socket created"<<endl;
else
cout<<"Socket not created"<<endl;
unsigned short port=4012;
struct in_addr serverIP;
//(void)inet_pton(AF_INET,"192.168.56.100", &clientIP);
(void)inet_pton(AF_INET,"192.168.56.101", &serverIP);
struct sockaddr_in server;
memset(&server,0, sizeof(server));
server.sin_family=AF_INET;
server.sin_addr=serverIP;
server.sin_port=htons(port);
if(bind(Socket,(struct sockaddr*)&server, sizeof(&server))!=1)
cout<<"Binding successful"<<endl;
else
cout<<"Binding failed";
struct sockaddr client;
memset(&client, 0, sizeof(client));
socklen_t clientlen=0;
struct sockaddr_in* client_in;
memset(&client_in,0,sizeof(client_in));
cout<<"warten vor recv"<<endl;
ssize_t bytesread=recvfrom(Socket, &msg, sizeof(msg), 0, &client,&clientlen);
cout<<(int)bytesread<<endl;
cout<<msg<<endl;
client_in=(struct sockaddr_in*)&client;
char* client_adr=inet_ntoa(client_in->sin_addr);
printf("%s Port%dn", client_adr, ntohs(client_in->sin_port));
if (bytesread == -1) {
cerr << "Fehler beim empfangen" << endl;
int status = close(Socket);
if (status == 0)
cout << "Socket closed" << endl;
else if (status == -1)
cout << "Socket not closed" << endl;
return (1);
}
//Wenn Infos ueber Client nicht schon vorher aus recvfrom()
/*struct in_addr clientIP;
(void)inet_pton(AF_INET,"192.168.2.102", &clientIP);
struct sockaddr_in client;
memset(&client,0, sizeof(client));
client.sin_family=AF_INET;
client.sin_addr=clientIP;
client.sin_port=htons(portwindows);*/
char msg2[]="12345";
ssize_t bytessent=sendto(Socket,msg2,strlen(msg2),0,(struct sockaddr*)&client,sizeof(client));
cout<<(int)bytessent<< " bytes were sent"<<endl;
int status=close(Socket);
if(status==0)
cout<<"Socket closed"<<endl;
else if(status==-1)
cout<<"Socket not closed"<<endl;
在调试模式下运行程序后,程序突然传递 recvfrom,但没有收到发送的数据。即使我在 while-loop 中运行 recvfrom 并不断向端口发送数据 recvfrom 也永远不会得到包。如果我尝试在它之前运行监听并接受(我知道通常不需要 udp 连接),函数都返回 -1。但是我不明白为什么我的套接字还没有准备好接收数据。也许没有人有解决这个问题的想法?
相关文章:
- 使用 IP 帮助程序的 Windows 中活动 UDP 连接的远程地址
- 使用C++创建UDP服务器以嵌入跨平台iOS和Android应用程序中
- 套接字 UDP - 程序在接收处停止
- UDP客户端/服务器程序在不同的IP和端口上通信超过2个插座
- 提升未使用正确端口的 UDP 组播发送程序
- 为什么关闭初始程序后在ncat上看不到UDP?
- 如何模拟QT UDP程序的数据包丢失
- 客户端服务器回声程序进入UDP的僵局
- 仅使用UDP托管小型服务器应用程序的缺点是什么
- Boost ASIO UDP 套接字async_receive_from不调用处理程序
- 在MFC应用程序中聆听UDP或切换到TCP
- 使用 UDP 的双向通信程序无法正常工作
- c++UDP中继应用程序延迟
- UDP客户端-服务器程序使用gcc而不是g++进行编译
- select() 在一个简单的自制 p2p 程序中与 udp 交换"musicdata"的问题
- 如何在 c++ 的一个应用程序中同时使用 TCP 和 UDP
- 在C++中创建基本的UDP聊天程序
- 如何获取目标应用程序的tcp/udp端口列表
- c++反序列化通过UDP从c#应用程序发送的对象
- 为什么启用 Windows 基本筛选引擎服务后,我的应用程序无法接收 UDP 数据包?