首先載入套接字型檔
#include //套接字型檔標頭檔案
還需要為工程新增連線ws2_32.lib
word wversionrequested;
wsadata wsadata;
int err;
wversionrequested = makeword(2,2);
err = wsastartup(wversionrequested,&wsadata);
if(err != 0)
return false;
if(lobyte(wsadata.wversion) != 2 ||
hibyte(wsadata.wversion) !=2)
wsacleanup();
return false;
建立並初始化套接字
bool ::initsocket
m_socket = wsasocket(af_inet,sock_dgram,0,null,0,0); //m_scoket為scoket型別在標頭檔案中定義
if(invalid_socket == m_socket)
afxmessagebox("建立套接字失敗!");
return;
sockaddr_in addrsock;
addrsock.sin_addr.s_un.s_addr = htonl(inaddr_any); //htonl 將u_long從主機位元組順序轉換為tcp/ip網路位元組順序
addrsock.sin_family = af_inet;
addrsock.sin_port = htons(6000); //htons 將u_short從主機位元組順序轉換為tcp/ip網路位元組順序
if(socket_error == bind(m_socket,(sockaddr*)&addrsock,sizeof(sockaddr)))
afxmessagebox("繫結失敗! ");
return false;
if(socket_error == wsaasyncselect(m_socket,m_hwnd,um_sock,fd_read)) //um_sock自定義訊息,m_hwnd對話方塊視窗控制代碼
afxmessagebox("註冊網路讀取時間失敗!");
return false;
return true;
實現接收端功能
新增訊息響應函式
#define um_sock wm_user+1
afx_msg void onsock(wparam,lparam);
on_message(um_sock,onsock)
void ::onsock(wparam wparam,lparam lparam)
switch(loword(lparam))
case fd_read:
wsabuf wsabuf;
wsabuf.buf = new char[200];
wsabuf.len = 200;
dword dwread;
dword dwflag = 0;
sockaddr_in = addrfrom;
int len = sizeof(sockaddr);
cstring strl;
cstring strtemp;
if(socket_error == wsarecvfrom(m_socket,&wsabuf,1,&dwread,&dwflag,
(sockaddr*)&addrfrom,&len,null,null)
afxmessagebox("接收資料失敗!");
delete wsabuf.buf;
return;
實現傳送端功能
void ::onbtnsend()
dword dwip;
cstring strsend;
wsabuf wsabuf;
dword dwsend;
int len;
sockaddr_in addrto;
((cipaddressctrl*)getdlgitem(idc_ipassress1))->getaddress(dwip); //idc_ipassress1 ,ip控制項的id
addrto.sin_addr.s_un.s_addr = htonl(dwip);
addrto.sin_family = af_inet;
addrto.sin_port = htons(6000);
getdlgitemtext(idc_edit_send,strsend); //傳送資料edit的id
len = strsend.getlength();
wsabuf.buf = strsend.getbuffer(len);
wsabuf.len = len + 1;
if(socket_error == wsasendto(m_socket,&wsabuf,1,&dwsend,0,
setdlgitemtext(idc_edit_send,""); //清空傳送編輯框
(sockaddr*)&addrto,sizeof(sockaddr),null,null))
afxmessagebox("是、傳送資料失敗!");
return;
終止套接字型檔的使用
wsacleanup();
關閉套接字
closesocket(m_socket);
基於訊息的非同步套接字程式設計
n n nwindows sockets 的非同步選擇函式 wsaasyncselect 提供了訊息 機制的網路事件選擇,當使用它登記的網路事件發生時,windows 應用程式相應的視窗函式將收到乙個訊息,訊息中指 示了發生的網路事件,以及與事件相關的一些資訊。windows sockets 為了支...
基於流式套接字的訊息收發
今天第一次寫部落格,不知學習python已經將近乙個半月了。經同學的推薦,於是想用部落格來記錄一點東西,也便於自己對於知識的梳理和總結。希望能在這裡結交到興趣相同的盆友,沒事可以交流交流程式設計思想!套接字 實現網路程式設計進行資料傳輸的一種技術手段。所謂流式套接字,是指以位元組流的方式進行資料傳輸...
非同步套接字
wsadata wsa wsastartup makeword 2,2 wsa socket fdserver socket af inet,sock stream,ipproto tcp struct sockaddr in server server.sin family af inet ser...