UDP網路程式設計

2021-09-23 07:56:00 字數 2645 閱讀 3737

步驟:

一、載入套接字型檔

二、建立套接字

三、套接字繫結

四、建立接收執行緒

五、啟動傳送

一、載入套接字型檔

#include //需要新增此標頭檔案

if(!afxsocketinit())

二、建立套接字

socket m_socket;

m_socket = socket(af_inet,sock_dgram,0);

if(invalid_socket==m_socket)

套接字需要定義成成員函式,因為在其他地方要使用。

三、套接字繫結

int retval;

sockaddr_in addrsock;

addrsock.sin_family=af_inet;

addrsock.sin_addr.s_un.s_addr=htonl(inaddr_any);

if( bflag )

}else

//繫結失敗,埠加一繼續試

port++;

} }

四、建立接收執行緒

//由於接收函式是阻塞模式,為了使超時重傳能夠起作用,為接收函式新建個執行緒

typedef struct re

recvparam_com;

recvparam_com *precvparam=new recvparam_com;

precvparam->pcom = this;

precvparam->sock = m_socket;

handle hthread1 = createthread(null,0,recvproc,(lpvoid)precvparam,0,null);

closehandle(hthread1);

//執行緒函式

dword winapi ccom::recvproc(lpvoid lpparameter)

; //接收緩衝區

frame_hdr *frame_hdr = (frame_hdr *)udp_recvbuf;

frame_body_14 *frame_body_14 = (frame_body_14 *)&udp_recvbuf[3];

while(1)

//接收資料過濾

if( (pcom->m_addrto.sin_addr.s_un.s_addr == addrfrom.sin_addr.s_un.s_addr) &&

(pcom->m_addrto.sin_port == addrfrom.sin_port) )

}//返回

return 0;

}

引數(套接字,接收緩衝區,接收資料長度,0,源位址,源位址長度指標)

recvfrom函式要放在死迴圈裡,不停地等待資料的到來。當收到應答資料後,要通過標記通知主線程。

五、啟動傳送

//準備傳送內容

frame_hdr *frame_hdr = (frame_hdr *)udp_sendbuf;

frame_body_13 *frame_body_13 = (frame_body_13 *)&udp_sendbuf[3];

frame_hdr->pass[0] = 0x55;

frame_hdr->pass[1] = 0xaa;

frame_hdr->type = frame_type_send;

frame_body_13->type = m_bsubframetype;

//傳送位址

m_addrto.sin_family=af_inet;

m_addrto.sin_port=htons(1);\\對方埠號

m_addrto.sin_addr.s_un.s_addr=htonl(m_dwip);\\對方ip位址

//傳送

sendto(m_socket,udp_sendbuf,4,0,(sockaddr*)&m_addrto,sizeof(sockaddr));

引數(套接字,傳送緩衝區,傳送資料長度,0,目標位址,目標位址長度)

一般不關注sendto的返回值,因為udp是面向無連線的,所以必須由上層進行差錯控制,是否傳送成功只能通過對方的回應來判斷。

連續重發時,中間需要加上延時,否則只有最後一條指令起作用。

//傳送,防止丟包,多發幾次

sendto(sock,udp_sendbuf,sizeof(frame_hdr)+sizeof(frame_body_0f),0,(sockaddr*)&addrto,sizeof(sockaddr));

sleep(100);

sendto(sock,udp_sendbuf,sizeof(frame_hdr)+sizeof(frame_body_0f),0,(sockaddr*)&addrto,sizeof(sockaddr));

sleep(100);

sendto(sock,udp_sendbuf,sizeof(frame_hdr)+sizeof(frame_body_0f),0,(sockaddr*)&addrto,sizeof(sockaddr));

UDP網路程式設計

基於udp 伺服器 程式步驟 1.建立乙個socket,用socket 函式 2.繫結ip位址 埠等資訊到socket上,用函式bind 3.迴圈接收資料,用recvfrom 4.關閉網路連線。基於udp 客戶端 程式步驟 1.建立乙個socket,用socket 函式 2.繫結ip位址 埠等資訊到...

UDP網路程式設計

基於udp 通訊模型 由上圖可以看出udp通訊的步驟如下 基於udp 伺服器 1 建立乙個socket,用函式socket 2 繫結ip位址 埠等資訊到socket上,用函式bind 3 迴圈接收資料,用函式recvfrom 4 關閉網路連線 基於udp 客戶端 1 建立乙個socket,用函式so...

網路程式設計 UDP

網路程式設計傳輸層選擇乙個資料控制模式 tcp或者udp,前面我們已經介紹了tcp程式設計,這篇我們簡單的來看看udp程式設計。udp是無連線的不可靠的資料報服務。udp協議在ip協議上增加了復用 分用和差錯檢測功能。udp的特點 a 是無連線的。相比於tcp協議,udp協議在傳送資料前不需要建立連...