如何使用matlab检查linux中的端口是否空闲

时间:2014-07-30 04:23:47

标签: linux matlab

我从来没有写过这样的东西,如何在Linux环境中使用c程序检查端口是否为空,非常感谢。

我正在使用像

这样的东西
[r.s]=system('netstat');

然后检查输出 - 但在使用matlab中的文本时非常非常弱 我必须创建一个函数来检查端口是否空闲 (然后我将不得不制作一个可以连续释放3k端口的程序..)

ps寻找某种不使用bind或connect然后检查它是否失败的方法 因为我需要连续找到3k个空闲端口

很多

1 个答案:

答案 0 :(得分:0)

您可能需要分两步进行此操作:

1)用C编写程序,检查给定端口是否打开

2)在MATLAB中调用C程序

以下代码检查给定端口是否已打开:

int main(int argc, char *argv[])
{
int portno     = 5454;
char *hostname = "localhost";

int sockfd;
struct sockaddr_in serv_addr;
struct hostent *server;

sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
    error("ERROR opening socket");
}

server = gethostbyname(hostname);

if (server == NULL) {
    fprintf(stderr,"ERROR, no such host\n");
    exit(0);
}

bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
bcopy((char *)server->h_addr,
     (char *)&serv_addr.sin_addr.s_addr,
     server->h_length);

serv_addr.sin_port = htons(portno);
if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0) {
    printf("Port is closed");
} else {
    printf("Port is active");
}

close(sockfd);
return 0;

}

以上代码非常常见,可以找到它的来源here

接下来介绍如何从MATLAB调用C函数的细分here

如果您有任何疑问,请与我们联系!