我从来没有写过这样的东西,如何在Linux环境中使用c程序检查端口是否为空,非常感谢。
我正在使用像
这样的东西[r.s]=system('netstat');
然后检查输出 - 但在使用matlab中的文本时非常非常弱 我必须创建一个函数来检查端口是否空闲 (然后我将不得不制作一个可以连续释放3k端口的程序..)
ps寻找某种不使用bind或connect然后检查它是否失败的方法 因为我需要连续找到3k个空闲端口
很多答案 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。
如果您有任何疑问,请与我们联系!