基于 Matlab C 的 Mex 文件,套接字不是 运行
Matlab C-based Mex file with sockets not running
我想在 C/C++ 中学习更多关于网络工具的知识,因此我决定将一些 C 回显服务器编码复制到一个 mex 文件中,以便通过 Matlab 使用它。问题是,当我构建 mex 文件并执行它时,它似乎 运行 永远不会监听套接字或任何东西。我在代码中包含了一些打印语句来测试我们是否正在输入 mex 文件,但目前 none 根本没有打印。这是代码:
#define char16_t UINT16_T //shenanigans with the compiler
#include "mex.h"
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <stdio.h>
#include <string.h>
void echo(){
char str[100];
int listen_fd, comm_fd;
struct sockaddr_in servaddr;
listen_fd = socket(AF_INET, SOCK_STREAM,0);
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htons(INADDR_ANY);
servaddr.sin_port = htons(22000);
bind(listen_fd, (struct sockaddr *) &servaddr, sizeof(servaddr));
mexPrintf("Listening");
listen(listen_fd, 10);
comm_fd = accept(listen_fd, (struct sockaddr *) NULL, NULL);
mexPrintf("Connected");
while(1)
{
bzero(str, 100);
read(comm_fd, str, 100);
mexPrintf("Echoing back - %s", str);
write(comm_fd, str, strlen(str)+1);
}
}
void mexFunction(int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[])
{
mexPrintf("Starting");
echo();
mexPrintf("Finishing");
}
如有任何帮助,我们将不胜感激。
所以在测试回显服务器之后,它实际上似乎在工作,只要有一个套接字打开它就不会打印。很奇怪!
我想在 C/C++ 中学习更多关于网络工具的知识,因此我决定将一些 C 回显服务器编码复制到一个 mex 文件中,以便通过 Matlab 使用它。问题是,当我构建 mex 文件并执行它时,它似乎 运行 永远不会监听套接字或任何东西。我在代码中包含了一些打印语句来测试我们是否正在输入 mex 文件,但目前 none 根本没有打印。这是代码:
#define char16_t UINT16_T //shenanigans with the compiler
#include "mex.h"
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <stdio.h>
#include <string.h>
void echo(){
char str[100];
int listen_fd, comm_fd;
struct sockaddr_in servaddr;
listen_fd = socket(AF_INET, SOCK_STREAM,0);
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htons(INADDR_ANY);
servaddr.sin_port = htons(22000);
bind(listen_fd, (struct sockaddr *) &servaddr, sizeof(servaddr));
mexPrintf("Listening");
listen(listen_fd, 10);
comm_fd = accept(listen_fd, (struct sockaddr *) NULL, NULL);
mexPrintf("Connected");
while(1)
{
bzero(str, 100);
read(comm_fd, str, 100);
mexPrintf("Echoing back - %s", str);
write(comm_fd, str, strlen(str)+1);
}
}
void mexFunction(int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[])
{
mexPrintf("Starting");
echo();
mexPrintf("Finishing");
}
如有任何帮助,我们将不胜感激。
所以在测试回显服务器之后,它实际上似乎在工作,只要有一个套接字打开它就不会打印。很奇怪!