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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Window下UDP(socket)接和收数据案例

發布時間:2024/9/27 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Window下UDP(socket)接和收数据案例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  • 配置QT的環境變量,這臺電腦à屬性à高級系統設置à高級à環境變量à系統變量àpathàC:\Qt\Qt5.3.0\5.3\mingw482_32\bin;C:\Qt\Qt5.3.0\Tools\QtCreator\bin

  • 創建一個QT項目:winAndLinuxMyUdpProject項目

  • 修改QT的項目文件,修改winAndLinuxMyUdpProject.pro文件:

  • ?

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

    4.編寫頭文件:udp.h

    #ifndefUDP_H

    #defineUDP_H

    ?

    //明確的告訴C++編譯器,這是一個用C語言編譯的函數,你就不要把函數名

    //轉化為C++格式了

    //因為C++的編譯器位了方法的重載,會修改方法的名稱,如果最終的文件時

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

    extern"C"?//這里是C++的關鍵字

    {

    ???intsocket_send(constchar*IP);

    ???intsocket_recv();

    }

    #endif//UDP_H

    ?

    5.編寫頭文件的實現函數

    #include<winsock2.h>?//這里是windows下使用socket需要的文件

    #include<stdio.h>

    #include<string.h>

    ?

    /*接收ip地址*/

    intsocket_send(constchar*IP)

    {

    ???//初始化socket

    ???DWORDver;

    ???WSADATAwsaData;

    ???//在調用WSAStatrtup要告訴windows,我用什么版本的socket

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

    ???//windows要求,只要用socket,第一步必須調用這個函數

    ???WSAStartup(ver,&wsaData);

    ???//初始化socket完成

    ?

    ?

    ???//建立一個socket,第一個參數是指定socket要用那個協議,AF_INET

    ???//代表要用TCP/IP協議

    ???//第三個參數SOCK_DGRAM意思是要用UDP協議

    ???//第三個參數一般默認值填0

    ???SOCKETst=socket(AF_INET,SOCK_DGRAM,0);//定義一個socket

    ???structsockaddr_inaddr;

    ???memset(&addr,0,sizeof(addr));//初始化結構addr;

    ???addr.sin_family=AF_INET;//代表要使用一個TCP/IP的地址

    ???addr.sin_port=htons(8080);//hosttonetshort

    ???addr.sin_addr.s_addr=inet_addr(IP);

    ?

    ???charbuf[1024]={0};

    ???size_trc=0;

    ???while(1)

    ???{

    ???????memset(buf,0,sizeof(buf));

    ???????gets(buf);

    ???????if(buf[0]=='0')//做為還原的退出條件

    ???????????break;

    ???????//發送udp數據

    ???????rc=sendto(st,buf,strlen(buf),0,(structsockaddr

    ?????????????????????????????????????????*)&addr,sizeof(addr));

    ???}

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

    ???WSACleanup();//釋放winsocket內部的相關資源

    ?

    ???returnrc;

    }

    ?

    intsocket_recv()

    {

    ???//初始化socket

    ???DWORDver;

    ???WSADATAwsaData;

    ???//在調用WSAStatrtup要告訴widnows,我用什么版本的socket

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

    ???//Windows要求,只要用Socket,第一步必須調用這個函數

    ???WSAStartup(ver,&wsaData);

    ???//初始化socket完成

    ?

    ???//建立一個socket,第一個參數是指定socket要用那個協議,AF_INET代表要用TCP/IP協議

    ???//第二個參數SOCK_DGRAM意思是要用UDP協議

    ???//第三個參數一般默認填0

    ???SOCKETst=socket(AF_INET,SOCK_DGRAM,0);?//定義一個socket

    ???structsockaddr_inaddr;

    ???memset(&addr,0,sizeof(addr));?//初始化結構addr

    ???addr.sin_family=AF_INET;//代表要使用一個TCP/IP的地址

    ???addr.sin_port=htons(8080);//hosttonetshort

    ???addr.sin_addr.s_addr=htonl(INADDR_ANY);//做為接收方,不需要指定具體的IP地址,接收的主機是什么IP,我就在什么IP上收數據

    ???intrc=0;

    ???//將端口號和程序綁定

    ???if(bind(st,(structsockaddr*)&addr,sizeof(addr))>-1)

    ???{

    ???????charbuf[1024]={0};

    ???????structsockaddr_insendaddr;

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

    ???????intlen=sizeof(sendaddr);

    ?

    ???????while(1)

    ???????{

    ???????????memset(buf,0,sizeof(buf));

    ???????????//接收udp數據

    ???????????rc=recvfrom(st,buf,sizeof(buf),0,

    ?????????????????????????(structsockaddr*)&sendaddr,&len);

    ???????????printf("%s\n",buf);

    ???????}

    ???}

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

    ???WSACleanup();??//釋放win_socket內部的相關資源

    ?

    ???returnrc;

    }

    ? 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]);? // ??? } ??? else { ??? //表示接收消息 ??????? socket_recv(); ??? } ? ??? return 0; } ? 7.運行項目,項目截圖如下: A:先打開cmd窗口用于接收,進入項目winAndLinuxMyUdpProject.exe所在位置: G:\QT\build-winAndLinuxMyUdpProject-Desktop_Qt_5_3_0_MinGW_32bit-Debug\debug\? ??B:打開cmd窗口用于發送: 下面是接收窗口: 下面是發送窗口: ? 8.額外添加: A:gcc編譯過程: B:對于C語言來講,編譯完成之后函數的名稱不會改變,對于C++來講,函數的名稱發生改變,如果C代碼中的函數,在C++中使用一定要用extern “C”關鍵字來說明。 ??? C:在unixso文件一定要以lib開頭,以so結尾 ?

    總結

    以上是生活随笔為你收集整理的Window下UDP(socket)接和收数据案例的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。