步驟:
一、載入套接字型檔
二、建立套接字
三、套接字繫結
四、建立接收執行緒
五、啟動傳送
一、載入套接字型檔
#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協議在傳送資料前不需要建立連...