使用socket套接字時的兩點經驗

2021-06-16 04:52:27 字數 1250 閱讀 7701

使用socket套接字時的兩點經驗

最近我在使用socket程式設計的工作,總結了2點經驗,希望和大家分享一下。由於是菜鳥,有不對的地方還希望多多指教。

第一點經驗就是在建立新的套接字之前還需要呼叫乙個引入ws2_32.dll庫的函式。否則伺服器和客戶端連不上。

由於初次使用socket,所以查了很多資料,但是發現乙個問題,不知道為什麼按照資料上的步驟呼叫函式,但是最後卻連線不上,詳細查過msdn後,才發現大部分的資料上都是從呼叫socket開始,其實在這之前還有乙個初始化的函式需要呼叫。

如果使用platform sdk:windows sockets,在呼叫socket函式建立新的sockets之前要先呼叫wsastartup函式。wsastartup函式作用是引入ws2_32.dll庫。根據msdn上說,wsastartup函式必須是應用程式或dll呼叫的第乙個windows sockets函式,它允許應用程式或者dll指定需要的windows sockets版本和重新找回指定的windows sockets執行的細節。只有在成功的呼叫wsastartup函式之後才能進一步使用接下來的windows sockets函式。

同理,如果使用的是mfc包裝的csocket類,需要在呼叫cresat建立新的套接字之前呼叫afxsocketinit函式。afxsocketinit函式包裝的是wsastartup函式,作用是相同的。

第二點經驗就是使用socket程式設計時,每呼叫乙個函式如bind,listen等,如果出錯可以使用wsagetlasterror ()函式得到錯誤的編號,如果是mfc的csocket類,使用getlasterror()函式得到錯誤的編號。但是得到的編號是整形量,對除錯沒有意義,所以建議大家可以使用下面的程式得到中文錯誤資訊。

lpvoid lpmsgbuf;

formatmessage(format_message_allocate_buffer|format_message_from_system,0, getlasterror(),

makelangid(lang_neutral, sublang_default), //預設語言

(lptstr)&lpmsgbuf, 0, null );

//顯示

messagebox(0,(lpctstr)lpmsgbuf,_t("getlasterror"),mb_ok|mb_iconinformation );

//釋放記憶體

::localfree( lpmsgbuf );

這就是我的2點經驗,希望對初學socket的朋友有所幫助。

socket套接字 TCP使用

使用流程 建立套接字 connect鏈結tcp伺服器 命令 socket物件.connect 伺服器ip,伺服器port 3.收 發資料recv 接收資料的大小 send 傳送資料 4.關閉套接字 import socket def main 建立socekt物件 tcp socket socket...

使用socket 函式建立套接字

在linux中,一切都是檔案,除了文字檔案 原始檔 二進位制檔案等,乙個硬體裝置也可以被對映為乙個虛擬的檔案,稱為裝置檔案。例如,stdin 稱為標準輸入檔案,它對應的硬體裝置一般是鍵盤,stdout 稱為標準輸出檔案,它對應的硬體裝置一般是顯示器。對於所有的檔案,都可以使用 read 函式讀取資料...

使用snprintf時的兩點注意事項

使用snprintf函式時要注意兩點,這是我看過無數使用這個函式的程式設計師絕大部分都存在的兩點隱患 比如 char buf len int n snprintf buf,len,s d s str1,int2,str3 1.snprintf會自動在格式化後的字串尾新增 0,所有格式化長度,也就是第...