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的项目文件,修改winAndLinuxMyUd

  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;
}
目录
相关文章
|
Linux 数据安全/隐私保护 Windows
命令方式:window向linux传文件
【10月更文挑战第6天】本文介绍了如何在Linux系统中通过命令`ip a`获取IP地址,并在Windows系统下使用CMD命令行工具和SCP命令实现文件传输。示例展示了如何将D盘中的`mm.jar`文件上传至IP地址为192.168.163.122的Linux系统的/up/目录下,最后在Linux系统中确认文件传输结果。
659 65
|
5月前
|
安全 应用服务中间件 网络安全
在Linux环境部署Flask应用并启用SSL/TLS安全协议
至此,你的Flask应用应该能够通过安全的HTTPS协议提供服务了。记得定期更新SSL证书,Certbot可以帮你自动更新证书。可以设定cronjob以实现这一点。
334 10
|
5月前
|
Java Linux 网络安全
Linux云端服务器上部署Spring Boot应用的教程。
此流程涉及Linux命令行操作、系统服务管理及网络安全知识,需要管理员权限以进行配置和服务管理。务必在一个测试环境中验证所有步骤,确保一切配置正确无误后,再将应用部署到生产环境中。也可以使用如Ansible、Chef等配置管理工具来自动化部署过程,提升效率和可靠性。
528 13
|
4月前
|
存储 数据采集 监控
ubuntu(linux)系统主要应用于哪些工业场景中?研维三防ubuntu系统的手持工业三防平板电脑在哪些行业中有实际应用
Ubuntu 系统凭借其独特的优势,在众多工业场景中得到了广泛应用,为工业数字化、智能化发展提供了有力支持。而研维三防基于 Ubuntu 定制系统的手持工业三防平板电脑,更是将 Ubuntu 系统的优势与工业级的性能、坚固耐用性完美结合,在电力、物流、制造等多个行业中展现出强大的应用价值,助力企业提高生产效率、优化管理流程、提升产品质量,成为推动工业现代化发展的重要力量。随着技术的不断进步与创新,相信 Ubuntu 系统以及研维三防这类工业级设备将在更多的工业领域中发挥更大的作用,为工业发展带来更多的机遇与变革。
|
10月前
|
机器学习/深度学习 安全 Linux
Linux 主要应用领域的归纳
服务器领域 Linux在服务器领域的应用是其最为广泛和成熟的领域之一。由于其开源、稳定、高效和安全的特性,Linux成为许多企业服务器的首选操作系统。 Web服务器:Linux是Web服务器的理想选择,因为它支持Apache、Nginx等流行的Web服务器软件,这些软件在Linux上运行稳定且性能卓越。Linux服务器可以高效地处理大量并发请求,提供快速、可靠的Web服务。 数据库服务器:Linux也广泛用于数据库服务器,如MySQL、PostgreSQL和Oracle等数据库管理系统在Linux上运行良好。Linux的稳定性和安全性使得它成为存储和管理敏感数据的理想平台。 邮件服务器:Lin
491 5
|
缓存 Linux 开发者
Linux内核中的并发控制机制:深入理解与应用####
【10月更文挑战第21天】 本文旨在为读者提供一个全面的指南,探讨Linux操作系统中用于实现多线程和进程间同步的关键技术——并发控制机制。通过剖析互斥锁、自旋锁、读写锁等核心概念及其在实际场景中的应用,本文将帮助开发者更好地理解和运用这些工具来构建高效且稳定的应用程序。 ####
238 5
|
存储 安全 关系型数据库
Linux系统在服务器领域的应用与优势###
本文深入探讨了Linux操作系统在服务器领域的广泛应用及其显著优势。通过分析其开源性、安全性、稳定性和高效性,揭示了为何Linux成为众多企业和开发者的首选服务器操作系统。文章还列举了Linux在服务器管理、性能优化和社区支持等方面的具体优势,为读者提供了全面而深入的理解。 ###
|
Unix Linux Ruby
在windows和linux上高效快捷地发布Dash应用
在windows和linux上高效快捷地发布Dash应用
595 4
|
Linux iOS开发 开发者
跨平台开发不再难:.NET Core如何让你的应用在Windows、Linux、macOS上自如游走?
【8月更文挑战第28天】本文提供了一份详尽的.NET跨平台开发指南,涵盖.NET Core简介、环境配置、项目结构、代码编写、依赖管理、构建与测试、部署及容器化等多个方面,帮助开发者掌握关键技术与最佳实践,充分利用.NET Core实现高效、便捷的跨平台应用开发与部署。
1446 3
|
存储 Linux 网络安全
【Azure App Service】.NET代码实验App Service应用中获取TLS/SSL 证书 (App Service Linux/Linux Container)
【Azure App Service】.NET代码实验App Service应用中获取TLS/SSL 证书 (App Service Linux/Linux Container)
189 0