window应用移植到Linux下(应用移植)
2020-12-13 06:16
标签:应用移植
配置QT的环境变量,这台电脑à属性à高级系统设置à高级à环境变量à系统变量àpathàC:\Qt\Qt5.3.0\5.3\mingw482_32\bin;C:\Qt\Qt5.3.0\Tools\QtCreator\bin
创建一个QT项目:winAndLinuxMyUdpProject项目
修改QT的项目文件,修改winAndLinuxMyUdpProject.pro文件:
注意,这的的:LIBS
+= -lWs2_32
##标示使用window下的Ws2_32.lib,-l表示要链接后面的库 4.编写头文件:udp.h #ifndef
UDP_H #define
UDP_H //明确的告诉C++编译器,这是一个用C语言编译的函数,你就不要把函数名 //转化为C++格式了 //因为C++的编译器位了方法的重载,会修改方法的名称,如果最终的文件时 //C++为后缀的,那么就不需要加上下面一句了 extern
"C"
//这里是C++的关键字 {
int
socket_send(const
char
*IP);
int
socket_recv(); } #endif
//
UDP_H 5.编写头文件的实现函数 #include
#include
#ifdef
MYLINUX #include
#include
#include
#include
#define
SOCKET
int #else #include
#endif int
socket_send(const
char
*IP) { #ifndef
MYLINUX
//初始化socket
DWORD
ver;
WSADATA
wsaData;
ver
=
MAKEWORD(1,
1);//在调用WSAStatrtup要告诉widnows,我用什么版本的socket
WSAStartup(ver,
&wsaData);//windows要求,只要用socket,第一步,必须调用这个函数
//初始化socket完成 #endif
//建立一个socket,第一个参数是指定socket要用那个协议,AF_INET代表要用TCP/IP协议
//第二个参数SOCK_DGRAM意思是要用UDP协议
//第三个参数一般默认填0
SOCKET
st
=
socket(AF_INET,
SOCK_DGRAM,
0);//定义一个socket
struct
sockaddr_in
addr;
memset(&addr,
0,
sizeof(addr));//初始化结构addr;
addr.sin_family
=
AF_INET;//代表要使用一个TCP/IP的地址
addr.sin_port
=
htons(8080);//host
to
net
short
addr.sin_addr.s_addr
=
inet_addr(IP);
//
unsigned
long
laddr
=
inet_addr("192.168.6.200");
//
unsigned
char
*p
=
&laddr;
//
printf("%u,%u,%u,%u\n",
*(p),
*(p
+
1),*(p
+
2),
*(p
+
3));
char
buf[1024]
=
{0};
size_t
rc
=
0;
while(1)
{ memset(buf,
0,
sizeof(buf)); gets(buf); if
(buf[0]
==
‘0‘)//做为还原的退出条件 break; //发送udp数据 rc
=
sendto(st,
buf,
strlen(buf),
0,
(struct
sockaddr
*)&addr,
sizeof(addr));
}
#ifdef
MYLINUX
close(st); #else
closesocket(st);//使用完socket要将其关闭
WSACleanup();//释放win
socket内部的相关资源 #endif
return
rc; } int
socket_recv() { #ifndef
MYLINUX
//初始化socket
DWORD
ver;
WSADATA
wsaData;
//在调用WSAStatrtup要告诉widnows,我用什么版本的socket
ver
=
MAKEWORD(1,
1);
//windows要求,只要用socket,第一步,必须调用这个函数
WSAStartup(ver,
&wsaData);
//初始化socket完成 #endif
//建立一个socket,第一个参数是指定socket要用那个协议,AF_INET代表要用TCP/IP协议
//第二个参数SOCK_DGRAM意思是要用UDP协议
//第三个参数一般默认填0
SOCKET
st
=
socket(AF_INET,
SOCK_DGRAM,
0);//定义一个socket
struct
sockaddr_in
addr;
//初始化结构addr;
memset(&addr,
0,
sizeof(addr));
//代表要使用一个TCP/IP的地址
addr.sin_family
=
AF_INET;
addr.sin_port
=
htons(8080);//host
to
net
short
//做为接收方,不需要指定具体的IP地址,接收的主机是什么IP,我就在什么IP上收数据
addr.sin_addr.s_addr
=
htonl(INADDR_ANY);
int
rc
=
0;
//将端口号和程序绑定
if
(bind(st,
(struct
sockaddr
*)&addr,
sizeof(addr))
>
-1)
{ char
buf[1024]
=
{0}; struct
sockaddr_in
sendaddr; memset(&sendaddr,
0,
sizeof(sendaddr)); #ifdef
MYLINUX socklen_tlen; #else int
len; #endif len
=
sizeof(sendaddr); while(1) { memset(buf,
0,
sizeof(buf)); //接收udp数据 rc
=
recvfrom(st,
buf,
sizeof(buf),
0,
(struct
sockaddr
*)&sendaddr,
&len); //inet_ntoa(sendaddr.sin_addr);//这个函数是不可重入函数 printf("%s:%s\n",
inet_ntoa(sendaddr.sin_addr),
buf); }
} #ifdef
MYLINUX close(st); #else
//使用完socket要将其关闭
closesocket(st);
//释放win
socket内部的相关资源
WSACleanup(); #endif
return
rc; } window应用移植到Linux下(应用移植),搜素材,soscw.com window应用移植到Linux下(应用移植) 标签:应用移植 原文地址:http://blog.csdn.net/tototuzuoquan/article/details/38459195
6.编写main.c
#include
#include "udp.h"
using namespace std;
int main(int argc, char *args[])
{
//这一句说明当参数的个数大于1的时候发送消息
if (argc > 1)
{
socket_send(args[1]);//args[1]表示的是IP地址
}
else
{
//表示接收消息
socket_recv();
}
return 0;
}