无法在 matlab 中的 UDP 客户端和 Linux 中的服务器之间发送数据
Not able to send data between UDP client in matlab and server in linux
我在一台机器的 matlab 中有 UDP 程序,在另一台机器的 cpp 中有 UDP。我能够通过运行 cpp 代码作为客户端和 matlab 代码作为服务器来将数据从 cpp 代码发送到 matlab。当我尝试以客户端运行 matlab 作为服务器并将 cpp 作为服务器运行时,我无法将数据发送到 cpp。在上述两种情况下,程序都在两台不同的机器上运行。我在同一台机器上尝试了 matlab 作为客户端和 cpp 作为服务器,然后它就可以工作了。
我的CPP代码
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <netdb.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include "port.h"
#define BUFSIZE 2048
int
main(int argc, char **argv)
{
struct sockaddr_in myaddr; /* our address */
struct sockaddr_in remaddr; /* remote address */
socklen_t addrlen = sizeof(remaddr); /* length of addresses */
int recvlen; /* # bytes received */
int fd; /* our socket */
unsigned char buf[BUFSIZE]; /* receive buffer */
/* create a UDP socket */
if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
perror("cannot create socketn");
return 0;
}
/* bind the socket to any valid IP address and a specific port */
memset((char *)&myaddr, 0, sizeof(myaddr));
myaddr.sin_family = AF_INET;
myaddr.sin_addr.s_addr = htonl(INADDR_ANY);
myaddr.sin_port = htons(SERVICE_PORT);
if (bind(fd, (struct sockaddr *)&myaddr, sizeof(myaddr)) < 0) {
perror("bind failed");
return 0;
}
/* now loop, receiving data and printing what we received */
for (;;) {
printf("waiting on port %dn", SERVICE_PORT);
recvlen = recvfrom(fd, buf, BUFSIZE, 0, (struct sockaddr *)&remaddr, &addrlen);
printf("received %d bytesn", recvlen);
if (recvlen > 0) {
buf[recvlen] = 0;
printf("received message: "%s"n", buf);
}
}
/* never exits */
}
在此处发布评论中的答案以提高可见性:
由于程序在同一台计算机上运行时可以工作,但在单独的计算机上运行时则不能工作,因此这表明存在防火墙问题(意味着计算机正在阻止入站流量)。在 Linux 中,iptables(这就是防火墙的名称)可以根据以下说明暂时禁用: https://www.cyberciti.biz/faq/turn-on-turn-off-firewall-in-linux/
如果这解决了问题,请不要忘记重新打开iptables。然后只需在iptables中为您的程序添加一个类似于以下指令的异常:https://help.ubuntu.com/community/IptablesHowTo#Allowing_Incoming_Traffic_on_Specific_Ports
相关文章:
- 如何使用gRPC在客户端和服务器之间双向发送和接收流元数据
- TCP在客户端服务器之间传输时,数据是否有任何限制
- 如何将数据序列化为C++ zmq 客户端和 Python zmq 服务器之间的通信
- 通过TCP在客户端/ C#服务器之间传输文件C++
- 为什么文件没有通过 tcp 在 C# 中的客户端和 C 中的服务器之间正确传输(保存?)
- 无法在 matlab 中的 UDP 客户端和 Linux 中的服务器之间发送数据
- 在 Winsock ws 客户端和 Websocket 服务器之间建立握手
- 在客户端和服务器之间序列化复杂的C++结构
- 客户端JavaScript和C 套接字服务器之间的通信
- 本地数据库的密码解决方案,在客户端和服务器之间传递
- 通过在 2 台服务器之间相互发送套接字来共享套接字 (WINSOCK)
- 通过 erlang 端口在 qt 应用程序和 erlang 服务器之间进行通信
- 如何在客户端和服务器之间建立sip会话
- boost::asio -服务器之间的冲突,双向通信
- 客户端和服务器之间UDP数据包连续流的问题
- GUI和服务器之间远程通信的更好解决方案
- 如何使用c++和PHP在客户端和云服务器之间正确存储时间戳和偏移量
- 客户机和服务器之间的通信不稳定
- Visual Studio - C++客户端和服务器之间发送矢量对象
- 使用加密 API 在客户端和服务器之间进行加密和解密的正确方法是什么?