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. Got a packet bigger than 'max_allowed_packet' bytes With statement Mysql终端数据同步不成功解决办法

    在做两个数据库数据拷贝的时候,遭遇 1153 - Got a packet bigger than 'max_allowed_packet' bytes With statement: 遇到这个问题, ...

  2. [Windows Phone]常用类库&API推荐

    原文 [Windows Phone]常用类库&API推荐 简介: 把自己的应用程序搭建在稳定的API之上,这会使得我们在开发时能把精力都集中在程序的业务逻辑之上,避免重复造轮子,并且使得程序结 ...

  3. 内嵌W5100的网络模块WIZ812MJ--数据手册

    1.简介 WIZ812MJ是一款内嵌了W5100(TCP/IP硬件芯片,内置PHY).MAG-JACK(带变压器的RJ45)和其他胶连逻辑的网络模块.它可以当作一个组件使用,而且不需要为W5100和变 ...

  4. opencv之haar特征+AdaBoos分类器算法流程(二)

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/ ...

  5. ASP.NET - Repeater控件删除按钮,点击删除信息

    前台代码: <!--类别信息--> <div id ="newnews" class ="Frm"> <h4>类别管理< ...

  6. js正则验证手机号码有效性

    验证130-139,150-159,180-189号码段的手机号码 <script type="text/javascript"> [-]{})|([-]{})|([- ...

  7. SQL Server使用问题总结

    1.datetime,smalldatetime,date的区别 1)datetime 从1753年1月1日到9999年12月31日的日期和时间数据,精确度为百分之三秒(等于   3.33毫秒或0.0 ...

  8. BMP文件结构

    1. 位图文件头 位图文件头包含有关于文件类型.文件大小.存放位置等信息,在Windows 3.0以上版本的位图文件中用BITMAPFILEHEADER结构来定义: typedef struct ta ...

  9. VB与报表的交互

    还接着上次说.在上个博客中已经说到建立好表的步骤了,接下来就是怎么使表与vb连接. 先看一下代码. Option Explicit Dim WithEvents Report As grproLibC ...

  10. CSS中的几个概念--------Day39

    世界杯疯狂来袭,让这个原本就高温的夏季瞬间被引爆了,这肆虐的激情仿佛让一切都灼热了起来,绽放着刺目的光,工作之余总有那么一群人在那激烈的讨论着争辩着,抑不住的亢奋. 非常不巧,往往这群身影中总有我的存 ...