无法在matlab中的UDP客户端和Linux

时间:2017-01-16 06:36:15

标签: c++ linux matlab sockets udp

我在一台机器的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 */
}

1 个答案:

答案 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