我在一台机器的matlab中有UDP程序,在其他机器上有cpp的UDP。通过将cpp代码作为客户端和matlab代码作为服务器运行,我能够将数据从cpp代码发送到matlab。当我尝试运行matlab作为客户端和cpp作为服务器时,我无法将数据发送到cpp.In以上两种情况下,程序运行在两台不同的机器上。我尝试使用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 socket\n");
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 %d\n", SERVICE_PORT);
recvlen = recvfrom(fd, buf, BUFSIZE, 0, (struct sockaddr *)&remaddr, &addrlen);
printf("received %d bytes\n", recvlen);
if (recvlen > 0) {
buf[recvlen] = 0;
printf("received message: \"%s\"\n", buf);
}
}
/* never exits */
}
答案 0 :(得分:1)
在此处发表评论的答案以获取可见性:
由于程序在同一台计算机上运行时有效,但在单独的计算机上运行时则无法运行,这表明防火墙存在问题(意味着计算机正在阻止入站流量)。在Linux中,可以按照https://www.cyberciti.biz/faq/turn-on-turn-off-firewall-in-linux/
中的说明暂时禁用iptables(这就是防火墙的名称)。如果能解决问题,请不要忘记重新打开iptables。然后在iptables中为您的程序添加一个类似于以下说明的异常:https://help.ubuntu.com/community/IptablesHowTo#Allowing_Incoming_Traffic_on_Specific_Ports