網路程式設計第一章總結(下)
1.3、基於windows平臺的實現
1.3.1、配置環境
在使用windows進行socket網路程式設計之前,需要先配置所需要的ws2_32.lib。
配置:屬性 -> 配置屬性 -> 輸入 -> 附加依賴項中新增ws2_32.lib
1.3.2、Winsock初始化
在Winsock程式設計時,首先需要呼叫WASAtartup函式來設定Winsock版本,並初始化相應的庫。
int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);
wVersopmRequested:指需要用到的Winsock版本資訊。lpWSAData:WSADATA結構體變數的地址值。WODR是typedef宣告定義的unsigned short型別(若版本為1.2,則1表示主版本號,2表示副版本號,應傳遞0x0201,使用2.2版本應傳遞0x0202)
exam:
int main(void)
{
WSADATA wsaData;
if(WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
ErrorHandling("WSAStartup() error!");
return 0;
}
1.3.3、登出Winsock
int WSACleanup(void);
成功返回0,失敗則返回SOCKET_ERROR。一般在程式結束之前呼叫。
1.4、基於windows的套接字相關函式
1.4.1、建立套接字
SOCKET socket(int af, int type, int protocal);
成功返回套接字控制程式碼,失敗則返回INVALID_SOCKET。
1.4.2、繫結套接字
bind函式在windows和linux中相同
int bind(SOCKET s, const struct sockaddr * name, int namelen);
成功返回0,失敗則返回SOCKET_ERROR。
1.4.3、監聽套接字
listen函式在windows和linux中相同。
int listen(SOCKET s, int backlog);
成功返回0,失敗返回SOCKET_ERROR。
1.4.4、接受請求
accept在windows和linux中相同。
SOCKET accept(SOCKET s, struct sockaddr * addr, int * addrlen);
成功返回控制程式碼,失敗返回INVALID_SOCKET。
1.4.5、傳送連線請求
connect在windows和linux下相同。
int connect(SOCKET s, const struct sockaddr * name, int namelen);
成功返回0,失敗返回SOCKET_ERROR。
1.4.6 關閉socket
在windows下需要自己關閉socket連線,需要用到closesocket函式。
int closesocket(SOCKET s);
成功返回0,失敗返回SOCKET_ERROR。
1.5、windows下資料傳輸
linux中將套接字也當作檔案,所以無論是建立檔案還是套接字都是返回檔案描述符。而在windows中則需要區分檔案控制程式碼和socket控制程式碼。由於linux中套接字也是檔案,所以可以直接通過檔案I/O函式read和write來進行資料傳輸,而windows中則不同,windows中嚴格區分檔案I/O和套接字I/O。所以windows進行資料傳輸需要用到send和recv函式。
1.5.1、資料傳輸函式
使用send函式進行資料的傳輸。
int send(SOCKET s, const char *buf, int len, int flags);
成功返回傳輸字計數,失敗返回SOCKET_ERROR。
s:控制程式碼;buf:保持待傳輸資料的緩衝地址值;len:要傳輸的位元組數;flags:傳輸資料時用到的多種選項資訊。
1.5.2 接收資料
使用recv函式接受資料。
int recv(SOCKET s, const char * buf, int len, int flags);
成功返回接收的位元組數,如果到eof返回0,失敗返回SOCKET_ERROR。
s:套接字;buf:資料緩衝;len:最大位元組數;flags:接受多種選項資訊。
相關文章
- App網路相關設計總結APP
- 計算機網路總結(網路層)計算機網路
- 結對程式設計總結程式設計
- iOS多執行緒程式設計總結(下)iOS執行緒程式設計
- 程式設計技巧總結程式設計
- 網際網路和區域網網路程式設計Socket緩衝區最優總結程式設計
- 【程式設計素質】程式設計思想總結程式設計
- Nio程式設計模型總結程式設計模型
- 程式設計感悟總結一程式設計
- 《程式設計實踐》第一章編碼風格的不完全總結程式設計
- 計算機程式設計心得總結計算機程式設計
- 計算機網路實驗總結計算機網路
- 自己總結物件導向程式設計的總結物件程式設計
- “網際網路女王”10年總結:設計與技術密切整合
- 網頁設計的技巧總結網頁
- 程式設計師程式設計知識經驗總結程式設計師
- MR核心程式設計思想總結程式設計
- Javascript非同步程式設計總結JavaScript非同步程式設計
- 程式設計師面試技巧總結程式設計師面試
- iOS圖形程式設計總結iOS程式設計
- qt model view 程式設計總結QTView程式設計
- c++/tcl程式設計總結C++程式設計
- centos7下部署python網路爬蟲程式及django程式總結CentOSPython爬蟲Django
- 網路流總結
- 網路通訊程式設計程式設計
- 網路協程程式設計程式設計
- Socket 程式設計 (網路篇)程式設計
- py網路工具程式設計程式設計
- 計算機網路知識點總結計算機網路
- 《統計學習方法》第一章總結
- 好程式設計師大資料學習路線Hbase總結程式設計師大資料
- 計算機網路 第一章 1.1.1 計算機網路的概念計算機網路
- 基於WinSNMP的網路管理程式設計----原理與實踐(第一章) (轉)程式設計
- 程式設計師自我修養之程式設計經驗總結程式設計師
- Windows CMD命令列程式設計總結Windows命令列程式設計
- 遊戲程式設計十年總結遊戲程式設計
- 資料庫程式設計方法總結資料庫程式設計
- 一個老程式設計師在網際網路寒冬下的感悟程式設計師