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++的关键字

{

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;

//将端口号和程序绑定

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. 将vs+Qt的工程从windows平台移植到linux下_

    ​​​​​​​​​​​​将vs+Qt的工程从windows平台移植到linux下_崔杰城的博客-CSDN博客_windows下的qt工程移植到linux下 windows下Qt的开发人员常用vs+Qt ...

  2. 将vs+Qt的工程从windows平台移植到linux下

    windows下Qt的开发人员常用vs+Qt插件进行Qt桌面程序的开发.因为Qt是跨平台的,所以开发完成后如果需要把程序移植到linux下运行,只要把vs的项目工程放到linux下,编译即可.下面介绍 ...

  3. window 2003 linux,一步步从Windows 2003 DNS 移植到Linux下

    一.准备工作: 首先进入Windows 2003, DNS 服务管理器,选查看--列表: 然后导出列表到一个文件: mydomain.txt 进入 \winnt\system32\dns 将所有文件打 ...

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

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

  5. Linux下sqlite3移植与编程

    目标平台:LOONGSON-1B开发板 内核:Linux 3.0 编译平台:ubuntu10.04 交叉工具链:gcc-3.4.6-2f 简介 sqlite3一款主要用于嵌入式的轻量级数据库,本文旨在 ...

  6. Socket程序从Windows移植到Linux下的一些注意事项

    关于这个话题网上流传的是一个相同的版本,就是那个第一项是头文件的区别,但后面列出的头文件只有#include没有(估计是原版的在不断转载的过程中有人不小心忘了把尖括号转义,让浏览器当html标记解析没 ...

  7. Windows C++移植到Linux下运行需要怎么做?(以动态甜甜圈为例)

    本文将(https://zhangrelay.blog.csdn.net/article/details/109863427)程序在Linux下运行. 具体版本为Ubuntu 20.04. 程序如下: ...

  8. 复制中文到linux系统,怎么是的window文字复制到linux下

    在Windows下换行时,有两个字符:回车(/r)和换行(/n).但在Linux下,只有一个换行(/n) 可使用unix2dos和dos2unix命令进行格式的转换: 参数: -k 保持输出文件和输入 ...

  9. Linux下Oracle移植数据

    案例: 老LTESQM数据库下的toolbox用户数据移植到  新LTESQM数据库下的 toolbox 用户. 新LTESQM数据库下还没有toolbox这个用户 开始: 1.查看老LTESQM下t ...

最新文章

  1. 编译时遇到如下错误error C2061: syntax error : identifier 'THIS_FILE'
  2. oracle的存储过程 替换,为什么在存储过程中,变量替换无法使用索引?
  3. tensorflow分布式训练之同步更新和异步更新
  4. 新闻标题 静态分页 (无刷新)
  5. 童年各大名场面~ | 今日最佳
  6. 机器学习数据包之numpy
  7. 软工作业:(2)硬币游戏--代码分析与改进
  8. 算法:权重图的最最小生成树算法
  9. centos7完全卸载mysql_Centos7 完全卸载mysql
  10. 高中计算机教室标语,高中教室标语
  11. python计算隐含波动率_用Python快速计算隐含波动率
  12. 路由器与交换机知识总
  13. excel批量文件改名批量加后缀
  14. Redis(八):zset/zadd/zrange/zrembyscore 命令源码解析
  15. 串口控制74HC164C语言,51单片机74HC164串口控制数码管显示
  16. 申请阿里云服务器并配置SSL证书(附带微信公众号配置服务器)
  17. thinkpad X1catbon2019款装系统时无法U盘启动解决办法
  18. MATLAB(2)--MATLAB矩阵的表示
  19. halcon与C#混合编程进阶版
  20. 如何快速掌握Python数据采集与网络爬虫技术

热门文章

  1. 算法与数据结构(python):快速排序
  2. python学习笔记--turtle库的使用
  3. OpenCASCADE:下载安装
  4. wxWidgets:wxMenu/wxMenuBar 示例
  5. BOOST_PP_IS_EMPTY宏相关的测试程序
  6. boost::hana::difference用法的测试程序
  7. boost::icl::interval_map用法的测试程序
  8. boost::shared_ptr用法测试程序
  9. GDCM:gdcm::TagPath的测试程序
  10. Boost::context模块callcc的分段的测试程序