程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> vc網絡編程

vc網絡編程

編輯:vc教程

首先必須初始化網絡,可以在app的InitInstance()中用AfxSocketInit()或者直接用
WSAStartup( MAKEWORD(1,1),&wsaData)
WORD wVersionRequested WSADATA 初始化 winsock
WSACleanUp

然後是初始化套接字的方法,有tcp和udp兩種tcp下:
SOCKET(AF_INET,SOCK_STREAM,0)
bind(m_socket,(SOCKADDR*)&addrSock,sizeof(SOCKADDR));//同下面的代碼初始化SOCKADD_IN
服務器 listen (socket s, 超時時間)
socket new=accept(m_socket,(SOCKADDR*)&addrSock,sizeof(SOCKADDR)) 通過返回的新socket進行數據交換
send/recv(new,Buf,len,0)
inet_ntoa()把網絡字節序轉會主機字節序客戶端

SOCKADD_IN.sin_addr.s_un.s_addr=htonl(連接的ip)
sin_family=AF_INET
sin_port=htons(6000)
connect ( socket s,(SOCKADDR*)&SOCKADD_IN,sizeof(SOCKADDR))

send/recv (new,Buf,len,0)

udp下:
SOCKET(AF_INET, SOCK_DGRAM,0)
SOCK_DGRAM

SOCKADD_IN.sin_addr.s_un.s_addr=htonl(INADDR_ANY)
sin_family=AF_INET
sin_port=htons(6000)

bind(m_socket,(SOCKADDR*)&addrSock,sizeof(SOCKADDR));
recvfrom 接收(socket s,Buf,len,0,[in][out](sockaddr*),&len)
sendto 發送 [in]

以上的方法,需要派子線程進行循環處理,如果采用異步網絡通訊,則利用消息機制處理異步網絡通訊模式
s=WSASocket(AF_INET,SOCK_DGRAM,0,null,0,0)

bind(socket s,(SOCKADDR*)&addrSock,sizeof(SOCKADDR))//綁定函數沒有提供更多強大的方法注冊異步網絡事件 WSAAsyncSelect(s ,m_hWnd,接受信息的窗口句柄UM_SOCK, FD_READ))自定義的消息事件 產生時間的原由 //現在是網絡讀取事件

同樣地,如正常自定義消息方法
1#define UM_SOCK WM_USER+100
2在 .h中相應afx_msg void OnSock(WPARAM,LPARAM)
3.cpp ON_MESSAGE(UM_SOCK,OnSock)
4編寫void OnSock(WPARAM wParam,LPARAM lParam)
{
swich(LOWORD(lParam))//低字繼續保持消息內容
{
case FD_READ:
WSARecvFrom...
...
}

}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved