日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

window应用移植到Linux下(应用移植)

發(fā)布時(shí)間:2024/9/27 linux 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 window应用移植到Linux下(应用移植) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  • 配置QT的環(huán)境變量,這臺(tái)電腦à屬性à高級(jí)系統(tǒng)設(shè)置à高級(jí)à環(huán)境變量à系統(tǒng)變量àpathàC:\Qt\Qt5.3.0\5.3\mingw482_32\bin;C:\Qt\Qt5.3.0\Tools\QtCreator\bin

  • 創(chuàng)建一個(gè)QT項(xiàng)目:winAndLinuxMyUdpProject項(xiàng)目

  • 修改QT的項(xiàng)目文件,修改winAndLinuxMyUdpProject.pro文件:

  • ?

    注意,這的的:LIBS += -lWs2_32?? ##標(biāo)示使用window下的Ws2_32.lib-l表示要鏈接后面的庫(kù)

    4.編寫頭文件:udp.h

    #ifndef UDP_H

    #define UDP_H

    ?

    //明確的告訴C++編譯器,這是一個(gè)用C語(yǔ)言編譯的函數(shù),你就不要把函數(shù)名

    //轉(zhuǎn)化為C++格式了

    //因?yàn)?span lang="EN-US">C++的編譯器位了方法的重載,會(huì)修改方法的名稱,如果最終的文件時(shí)

    //C++為后綴的,那么就不需要加上下面一句了

    extern "C"? //這里是C++的關(guān)鍵字

    {

    ??? int socket_send(const char *IP);

    ??? int socket_recv();

    }

    #endif // UDP_H

    ?

    5.編寫頭文件的實(shí)現(xiàn)函數(shù)

    #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);//在調(diào)用WSAStatrtup要告訴widnows,我用什么版本的socket

    ??? WSAStartup(ver, &wsaData);//windows要求,只要用socket,第一步,必須調(diào)用這個(gè)函數(shù)

    ??? //初始化socket完成

    #endif

    ??? //建立一個(gè)socket,第一個(gè)參數(shù)是指定socket要用那個(gè)協(xié)議,AF_INET代表要用TCP/IP協(xié)議

    ??? //第二個(gè)參數(shù)SOCK_DGRAM意思是要用UDP協(xié)議

    ??? //第三個(gè)參數(shù)一般默認(rèn)填0

    ??? SOCKET st = socket(AF_INET, SOCK_DGRAM, 0);//定義一個(gè)socket

    ??? struct sockaddr_in addr;

    ??? memset(&addr, 0, sizeof(addr));//初始化結(jié)構(gòu)addr;

    ??? addr.sin_family = AF_INET;//代表要使用一個(gè)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;

    ???????//發(fā)送udp數(shù)據(jù)

    ???????rc = sendto(st, buf, strlen(buf), 0, (struct sockaddr *)&addr, sizeof(addr));

    ??? }

    ?

    ??? #ifdef MYLINUX

    ??? close(st);

    #else

    ??? closesocket(st);//使用完socket要將其關(guān)閉

    ??? WSACleanup();//釋放win socket內(nèi)部的相關(guān)資源

    #endif

    ??? return rc;

    ?

    }

    ?

    int socket_recv()

    {

    #ifndef MYLINUX

    ??? //初始化socket

    ??? DWORD ver;

    ??? WSADATA wsaData;

    ??? //在調(diào)用WSAStatrtup要告訴widnows,我用什么版本的socket

    ??? ver = MAKEWORD(1, 1);

    ??? //windows要求,只要用socket,第一步,必須調(diào)用這個(gè)函數(shù)

    ??? WSAStartup(ver, &wsaData);

    ??? //初始化socket完成

    #endif

    ?

    ??? //建立一個(gè)socket,第一個(gè)參數(shù)是指定socket要用那個(gè)協(xié)議,AF_INET代表要用TCP/IP協(xié)議

    ??? //第二個(gè)參數(shù)SOCK_DGRAM意思是要用UDP協(xié)議

    ??? //第三個(gè)參數(shù)一般默認(rèn)填0

    ??? SOCKET st = socket(AF_INET, SOCK_DGRAM, 0);//定義一個(gè)socket

    ??? struct sockaddr_in addr;

    ??? //初始化結(jié)構(gòu)addr;

    ??? memset(&addr, 0, sizeof(addr));

    ??? //代表要使用一個(gè)TCP/IP的地址

    ??? addr.sin_family = AF_INET;

    ??? addr.sin_port = htons(8080);//host to net short

    ??? //做為接收方,不需要指定具體的IP地址,接收的主機(jī)是什么IP,我就在什么IP上收數(shù)據(jù)

    ??? addr.sin_addr.s_addr = htonl(INADDR_ANY);

    ??? int rc = 0;

    ??? //將端口號(hào)和程序綁定

    ??? 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數(shù)據(jù)

    ???????????rc = recvfrom(st, buf, sizeof(buf), 0, (struct sockaddr *)&sendaddr, &len);

    ???????????//inet_ntoa(sendaddr.sin_addr);//這個(gè)函數(shù)是不可重入函數(shù)

    ???????????printf("%s:%s\n", inet_ntoa(sendaddr.sin_addr), buf);

    ???????}

    ??? }

    #ifdef MYLINUX

    close(st);

    #else

    ??? //使用完socket要將其關(guān)閉

    ??? closesocket(st);

    ??? //釋放win socket內(nèi)部的相關(guān)資源

    ??? WSACleanup();

    #endif

    ??? return rc;

    }

    ?

    6.編寫main.c #include <iostream> #include "udp.h" using namespace std; int main(int argc, char *args[]) { ??? //這一句說(shuō)明當(dāng)參數(shù)的個(gè)數(shù)大于1的時(shí)候發(fā)送消息 ??? if (argc > 1) ????{ ??????? socket_send(args[1]);//args[1]表示的是IP地址 ??? } ??? else { ??? //表示接收消息 ??????? socket_recv(); ??? } ? ??? return 0; }

    總結(jié)

    以上是生活随笔為你收集整理的window应用移植到Linux下(应用移植)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。