1. 配置QT的环境变量,这台电脑à属性à高级系统设置à高级à环境变量à系统变量àpathàC:\Qt\Qt5.3.0\5.3\mingw482_32\bin;C:\Qt\Qt5.3.0\Tools\QtCreator\bin

  2. 创建一个QT项目:winAndLinuxMyUdpProject项目

  3. 改动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下(应用移植)的更多相关文章

  1. 移植ARM linux下远程连接工具dropbear

    移植ARM linux下远程连接工具dropbear 原文地址:http://www.cnblogs.com/NickQ/p/9010529.html 移植zlib 下载地址:https://gith ...

  2. Socket程序从windows移植到linux下需要注意的

    )头文件 windows下winsock.h或winsock2.h linux下netinet/in.h(大部分都在这儿),unistd.h(close函数在这儿),sys/socket.h(在in. ...

  3. windows下系统移植到linux下出现的问题

    今天遇到了一个之前没有遇到的问题,记录一下. 我们是在windows下进行开发的,最终系统是部署在linux服务器上. 在windows一切正常,但是部署到linux下时,有些功能不能用了.通过log ...

  4. VS2008项目移植到Linux

    不少人都遇到过这种情况:在Windows下用Visual Studio工具开发的程序需要移植到Linux系统中,做成Linux版本的,但程序比较大,在Linux上又离不开Make,手动编写Makefi ...

  5. windows下的mysql迁移到linux下

    最近做毕业设计,需要把windows下的mysql移植到linux下 曾经有过在window下移植mysql数据库的经验,只需要把msql的数据文件复制到另一台安装mysql的机器的数据存放位置,然后 ...

  6. Linux下编译boost库和qt和ImageMagick

    需要把整个PCIE的工程移植到Linux下,当初就是用cmake来管理的工程的.但是命令行之类的还是需要改动.改动还不少,cmake里面很多东西都依赖于windows.包括我用cmake重新管理的工程 ...

  7. 嵌入式Linux下BOA网页server的移植

    **************************************************************************************************** ...

  8. 嵌入式Linux下MP4视频录制库MP4V2移植和简单介绍

    **************************************************************************************************** ...

  9. Onvif开发之Linux下gsoap的使用及移植

    一直以来都是在CSDN上面学习别人的东西,很多次想写点什么但是又无从写起.由于公司项目需要,最近一段时间在研究onvif,在网上找了很多资料,发现资料是非常多,但是很少有比较全的资料,或者资料太多无从 ...

随机推荐

  1. 20款Notepad++插件下载和介绍

    转自:http://www.kuqin.com/developtool/20090628/59334.html Notepad++从3.4版本开始支持插件机制,让用户可选择的为本身已经优秀的Notep ...

  2. Shell脚本笔记

      如何查询文件里的某个字符串? grep “字符串” 文件 例:grep "abc" tmp.txt   如何将查询出来的内容赋给变量? str=$(grep "abc ...

  3. DOM querySelector选择器

    原生的强大DOM选择器querySelector 在传统的 JavaScript 开发中,查找 DOM 往往是开发人员遇到的第一个头疼的问题,原生的 JavaScript 所提供的 DOM 选择方法并 ...

  4. Java学习笔记九(泛型)

    1.介绍 所谓的泛型就是将类型作为一种參数来传递.有了泛型后类型不再是一成不变的.能够通过泛型參数来指定. 能够提供程序开发的灵活性. 2.泛型类或接口的使用 泛型类声明时.与普通类没有太大的差别,仅 ...

  5. HDU 5046 Airport(DLX反复覆盖)

    HDU 5046 Airport 题目链接 题意:给定一些机场.要求选出K个机场,使得其它机场到其它机场的最大值最小 思路:二分+DLX反复覆盖去推断就可以 代码: #include <cstd ...

  6. semaphore实现浏览器的读写原理

    在编程范式中的斯坦福大学的老师说了一个例子:好比世界上就只有一台互联网的服务器,当我们浏览网页的时候,就好比服务器进行了写操作,而浏览器则进行了读操作. 我如果用简单的伪代码c++写出来是这个样子的: ...

  7. linux 下启动jar小程序

    下面是我的三个可运行jar程序 1.启动 采集话单文件应用程序 nohup java -jar gather.jar > logs/gather/console.out & 2.启动   ...

  8. S3C3440看门狗驱动程序

    S3C3440看门狗驱动程序 http://www.cnblogs.com/lfsblack/archive/2012/09/13/2684079.html 看门狗是当CPU进入错误状态后,无法恢复的 ...

  9. ASP.NET - 匹配标签中的内容

    string str = @"<td>Csdn</td>\r\n<td>V1.0</td>\r\n<td>2014-10-23&l ...

  10. git-daemon的快捷搭建

    使用git-daemon进行git服务器搭建 1.安装git-daemon 前提是已经安装git sudo apt-get install git git-core 然后安装git-daemon su ...