原始套接字學習筆記(2)

2022-03-15 18:58:14 字數 1088 閱讀 1445

在原始套接字學習的過程中,也遇到了一系列的問題,其中不乏自己粗心大意,也有各種沒有注意的錯誤,這裡著重寫出,並保持持續的更新。

1.fgets()函式問題

在使用套接字搭建聊天程式的時候,我在這裡使用了乙個fgets()函式來儲存鍵盤的輸入,具體**如下:

char buffer[100

];while(fgets(sendbuf,sizeof(sendbuf),stdin)!=0

)

這裡需要注意的問題是,由於fgets()函式是以回車鍵的輸入來判定結束的,與此同時,回車鍵『\n』也會作為最後乙個字元輸入到buffer中,所以這裡在處理一些資料的時候需要注意。

2.socket()建立問題

在socket()構建的過程中,往往跟隨乙個判定建立成功與否的perror()語句,這裡建議的寫法是:

int

sockfd;

sockfd=socket(af_inet,sock_dgram,0

);if(sockfd<0

)

int

sockfd;

if(sockfd=socket(af_inet,sock_dgram,0)<0

)

這種寫法很有可能會導致你的socket建立失敗,而且程式還不會報錯,所以小心一點這裡盡量多寫一句吧,養成良好的**習慣。

3.strlen()函式和sizeof()函式

strlen():strlen所作的僅僅是乙個計數器的工作,它從記憶體的某個位置(可以是字串開頭,中間某個位置,甚至是某個不確定的記憶體區域)開始掃瞄,直到碰到第乙個字串結束符'\0'為止,然後返回計數器值(長度不包含「\0」)。

sizeof():sizeof是c/c++中的乙個操作符(operator),簡單的說其作用就是返回乙個物件或者型別所佔的記憶體位元組數。

這兩個函式在使用過程中要注意,strlen()主要是計數功能,遇到『\0』後就停止計數返回數字,而sizeof()則返回該物件所佔的記憶體位元組數。

下面給出乙個小測試程式供參考:

#include#include

intmain()

學習 原始套接字

原始套接字可以訪問icmp和icmp等協議包,可以讀寫核心不處理的ip資料報。可以建立自定義的ip資料報首部。一句話,使用原始套接字可以 編寫基於ip協議的通訊程式。1.建立原始套接字 具體格式如下 int sockfd sockfd socktet af inet,sock raw,ipproto...

學習 原始套接字

原始套接字可以訪問icmp和icmp等協議包,可以讀寫核心不處理的ip資料報。可以建立自定義的ip資料報首部。一句話,使用原始套接字可以 編寫基於ip協議的通訊程式。1.建立原始套接字 具體格式如下 int sockfd sockfd socktet af inet,sock raw,ipproto...

原始套接字

資料出處 實際上,我們常用的網路程式設計都是在應用層的報文的收發操作,也就是大多數程式設計師接觸到的流式套接字 sock stream 和資料報式套接字 sock dgram 而這些資料報都是由系統提供的協議棧實現,使用者只需要填充應用層報文即可,由系統完成底層報文頭的填充並傳送。然而在某些情況下需...