开发环境:
系统: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文件的文件名)