MATLAB利用mex编译C++socket通信

开发环境
系统:window7 64位
MATLAB:2019a 64位
VS:2019
摘要:本篇博客主要实现利用VS2019 编写Socket服务端C++代码,MATLAB利用mex 编译C++代码,最后生成可以在MATLAB运行的mexw64文件,MATLAB启动mexw64文件实现socket通信。

一、Socket通信C++代码编写
参考博客:
(1)Window系统Socket通信代码:http://c.biancheng.net/cpp/html/3031.html
(2)VS配置MATLAB开发环境博客:
https://blog.csdn.net/bingbingshui90/article/details/75376717?locationNum=6&fps=1
在VS编写的Socket服务端代码

#include <iostream>
#include "mex.h"
#include <stdio.h>
#include <winsock2.h>
#pragma comment (lib,"ws2_32.lib")


using namespace std;
void socketServer();
void mexFunction(int nlhs, mxArray* plhs[], int nrhs, const mxArray* prhs[])
{
    
    
	socketServer();


}
void socketServer()
{
    
    
	WSADATA wsaData;
	WSAStartup(MAKEWORD(2, 2), &wsaData);

	SOCKET servSock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
	sockaddr_in sockAddr;
	memset(&sockAddr, 0, sizeof(sockAddr));
	sockAddr.sin_family = PF_INET;
	sockAddr.sin_addr.s_addr = inet_addr("192.168.1.17");
	sockAddr.sin_port = htons(7000);
	bind(servSock, (SOCKADDR*)&sockAddr, sizeof(SOCKADDR));

	listen(servSock, 20);
	SOCKADDR clntAddr;
	int nSize = sizeof(SOCKADDR);
	SOCKET clntSock = accept(servSock, (SOCKADDR*)&clntAddr, &nSize);

	const char* str = "hello World";
	send(clntSock, str, strlen(str) + sizeof(char), NULL);

	closesocket(clntSock);
	closesocket(servSock);

	WSACleanup();
	
}

二、MATLAB mex 编译C++代码
(1)选择编译器
如果没有安装mex,首先安装mex,直接在MATLAB搜索安装。

mex -setup

根据提示选择编译器
在这里插入图片描述
(2)将C++代码文件复制到当前MATLAB工作目录

(3)输入命令

mex  SocketBase.cpp -lwsock32

其中SocketBase.cpp是C++代码文件
等待编译完成即可利用命令:SocketBase启动(同样SocketBase是编译后的mexw64文件的文件名)

猜你喜欢

转载自blog.csdn.net/yyl80/article/details/106659580
今日推荐