WINSOCK网络函数
1. 頭文件及庫(kù)文件
頭文件:WINSOCK2.H
庫(kù):WS2_32.LIB庫(kù)
如果是在WINCE中,不支持SOCK2,所以:
頭文件:WINSOCK.H
庫(kù):WSOCK32.LIB
如果從MSWSOCK.H中使用了擴(kuò)展API,則需要鏈接MSWSOCK.DLL
2. 初始化Winsock
如果調(diào)用一個(gè)沒有初始化過winsock庫(kù)的相關(guān)socket函數(shù),則返回SOCKET_ERROR,另外錯(cuò)誤信息是:WSANOTINITIALISED;
int WSAStartup(WORD wVersionRequeted, LPWSADATA lpWSAData);
l wVersionRequested:指定加載的winsock庫(kù)的版本;
l lpWSAData:指向LPWSADATA結(jié)構(gòu)的指針,填充啟動(dòng)參數(shù);
3. 錯(cuò)誤檢測(cè)
常見的錯(cuò)誤返回值時(shí)SOCKET_ERROR,該值是-1;
若想獲取具體錯(cuò)誤信息,通過函數(shù):
int WSAGetLastError(void);
當(dāng)然,必須在winsock加載之后,才能調(diào)用該函數(shù),如果在WSAStartup就出錯(cuò),那就沒得辦法了。
4. 創(chuàng)建套接字
SOCKET socket(int af, int type, int protocol);
5. 面向連接的通信
綁定套接字:
int bind(SOCKET s, const struct sockaddr FAR* name, int namelen);
監(jiān)聽:
int listen(SOCKET s, int backlog);
接受連接:
SOCKET accept(SOCKET s,struct sockaddr FAR* addr, int FAR* addrlen);
連接:
int connect(SOCKET s, const struct sockaddr FAR* name, int namelen);
6. 數(shù)據(jù)傳輸
數(shù)據(jù)發(fā)送:
int send(SOCKET s, const char FAR* buf, int len, int flags);
接收數(shù)據(jù):
int recv(SOCKET s, char FAR* buf, int len, int flags);
7. 中斷連接
為了保證通信方能夠收到應(yīng)用程序發(fā)出的所有數(shù)據(jù),對(duì)于一個(gè)好的應(yīng)用程序來說,應(yīng)該通知接收端“不再發(fā)送數(shù)據(jù)”。同樣,通信方也該如此。
int shutdown(SOCKET s, int how);
從容關(guān)閉,可以選擇關(guān)閉項(xiàng)類型:SD_RECEIVE、SD_SEND、SD_BOTH;
直接關(guān)閉套接字:
int closesocket(SOCKET s);
8. 無連接通信
和面向連接不同,不必調(diào)用listen和accept,最簡(jiǎn)單的方式就是:
int recvfrom(SOCKET s, char FAR* buf, int len, int flags, struct sockaddr FAR* from, int FAR* fromlen);
而客戶端則直接發(fā)送數(shù)據(jù):
int sendto(SOCKET s, const char FAR* buf, int len, int flags, const struct sockaddr FAR* to, int tolen);
轉(zhuǎn)載于:https://www.cnblogs.com/davidsguo008/p/3593336.html
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的WINSOCK网络函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【转】Bresenham快速画直线算法
- 下一篇: mysql show status