window应用移植到Linux下(应用移植)
配置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++的keyword
{
int
socket_send(const
char
*IP);
int
socket_recv();
}
#endif
//
UDP_H
5.编写头文件的实现函数
#include
<stdio.h>
#include
<string.h>
#ifdef
MYLINUX
#include
<sys/types.h>
#include
<sys/socket.h>
#include
<arpa/inet.h>
#include
<unistd.h>
#define
SOCKET
int
#else
#include
<winsock2.h>
#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;
//将port号和程序绑定
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;
}
6.编写main.c
#include <iostream>
#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;
}
window应用移植到Linux下(应用移植)的更多相关文章
- 移植ARM linux下远程连接工具dropbear
移植ARM linux下远程连接工具dropbear 原文地址:http://www.cnblogs.com/NickQ/p/9010529.html 移植zlib 下载地址:https://gith ...
- Socket程序从windows移植到linux下需要注意的
)头文件 windows下winsock.h或winsock2.h linux下netinet/in.h(大部分都在这儿),unistd.h(close函数在这儿),sys/socket.h(在in. ...
- windows下系统移植到linux下出现的问题
今天遇到了一个之前没有遇到的问题,记录一下. 我们是在windows下进行开发的,最终系统是部署在linux服务器上. 在windows一切正常,但是部署到linux下时,有些功能不能用了.通过log ...
- VS2008项目移植到Linux
不少人都遇到过这种情况:在Windows下用Visual Studio工具开发的程序需要移植到Linux系统中,做成Linux版本的,但程序比较大,在Linux上又离不开Make,手动编写Makefi ...
- windows下的mysql迁移到linux下
最近做毕业设计,需要把windows下的mysql移植到linux下 曾经有过在window下移植mysql数据库的经验,只需要把msql的数据文件复制到另一台安装mysql的机器的数据存放位置,然后 ...
- Linux下编译boost库和qt和ImageMagick
需要把整个PCIE的工程移植到Linux下,当初就是用cmake来管理的工程的.但是命令行之类的还是需要改动.改动还不少,cmake里面很多东西都依赖于windows.包括我用cmake重新管理的工程 ...
- 嵌入式Linux下BOA网页server的移植
**************************************************************************************************** ...
- 嵌入式Linux下MP4视频录制库MP4V2移植和简单介绍
**************************************************************************************************** ...
- Onvif开发之Linux下gsoap的使用及移植
一直以来都是在CSDN上面学习别人的东西,很多次想写点什么但是又无从写起.由于公司项目需要,最近一段时间在研究onvif,在网上找了很多资料,发现资料是非常多,但是很少有比较全的资料,或者资料太多无从 ...
随机推荐
- BZOJ 1101: [POI2007]Zap( 莫比乌斯反演 )
求 answer = ∑ [gcd(x, y) = d] (1 <= x <= a, 1 <= y <= b) . 令a' = a / d, b' = b / d, 化简一下得 ...
- 搭建python集成开发环境.
需要搭建的内容一共有三项, python ,wxpython 以及spe. 其中spe 是python 的可视化集成开发环境(ide) , 其需要python GUI图形库wxpython的支 ...
- 解决外网与内网或内网之间的通信,NAT穿透
在网络编码中会发现程序在局域网中是可以适用的,但是在外网与内网之间和内网与内网之间就不可行.问题就在于NAT.首先介绍下NAT. NAT的作用NAT(Network Address Translato ...
- CxSkinButton按钮皮肤类
在codeproject 发现一个很强大的按钮皮肤类,之前的版本有内存泄露,但是作者已经修复了,原文网址是:http://www.codeproject.com/KB/buttons/cxskinbu ...
- cocos2d-x 制作资源下载页面
开发游戏中用到从http 服务器下载文件的操作,所以要有个界面显示下载进度,同时联网采用curl库,因为下载是同步的操作,所以用了多线程 啥也不说,直接贴代码.我是采用ccbi做的页面,你也可以做一个 ...
- 图解单片机8位PWM、16位PWM中“位”的含义!
今天 发现很多同学 搞不懂单片机的pwm中的位表示什么意思,如很多同学会问“8位pwm.16位pwm是什么意思啊,它们有什么区别啊,其中的‘位’表示什么意思啊”.对于这些问题,今天就给大家解释下,由于 ...
- Swift - 给图片添加文字水印(图片上写文字,并可设置位置和样式)
想要给图片添加文字水印或者注释,我们需要实现在UIImage上写字的功能. 1,效果图如下: (在图片左上角和右下角都添加了文字.) 2,为方便使用,我们通过扩展UIImage类来实现添加水印功能 ( ...
- Swift - 使用CABasicAnimation实现动画效果
1,CABasicAnimation类只有三个属性: fromValue:开始值 toValue:结束值 Duration:动画的时间 2,通过animationWithKeyPath键值对的方式设置 ...
- Managing your Actor Systems
今天偶然得机会,找到一篇不错得文章,现在分享给大家. 原文:http://www.kotancode.com/2013/02/15/managing-your-actor-systems/ If yo ...
- Java 实现观察者(Observer)模式
1. Java自带的实现 类图 /** * 观察目标 继承自 java.util.Observable * @author stone * */ public class UpdateObservab ...