TCP套接字的資料傳輸

2021-07-10 11:14:30 字數 1207 閱讀 2726

1.傳送資料

函式send用來在tcp套接字上傳送資料. #include #include 函式原型:ssize_t send(int sockfd,const void *msg,size_t  len,int   flags); 函式send只能對處於連線狀態的套接字使用, 引數sockfd為已經建立好連線的套接字描述符,即accept函式的返回值,引數msg指向存放待傳送資料的緩衝區,引數len為待發資料的長度; 引數flags為控制選項,一般設定為0或取以下值.

函式執行成功返回 實際傳送資料的位元組數;執行成功只能說明資料寫入套接字的緩衝區,並不代表資料已經成功的通過網路傳送到目的地. linux下預設阻塞方式例項:

#define buffersize    1500

char send_buf[buffersize];

if(send(sockfd,send_buf,len,0))

sockfd就是accept()函式的返回值;

帶外資料是什麼東東呢???????

傳輸層協議使用帶外資料(out-of-band,oob)來傳送一些重要的資料,如果通訊一方有重要的資料需要通知對方時,協議能夠將這些資料快速地傳送到對方。為了傳送這些資料,協議一般不使用與普通資料相同的通道,而是使用另外的通道。linux系統的套接字機制支援低層協議傳送和接受帶外資料。但是tcp協議沒有真正意義上的帶外資料。為了傳送重要協議,tcp提供了一種稱為緊急模式(urgent mode)的機制。tcp協議在資料段中設定urg位,表示進入緊急模式。接收方可以對緊急模式採取特殊的處理。很容易看出來,這種方式資料不容易被阻塞,並且可以通過在我們的伺服器端程式裡面捕捉sigurg訊號來及時接受資料.其實就把它理解成乙個安全通道就ok了,

2.接收資料

函式recv用來在tcp套接字上接收資料, #include #include ssize_t    recv(int s,  void   *buf,size_t    len,  int flags); 函式recv從引數s所指定的套接字描述符(必須是面向連線的套接字)上接收資料儲存到引數buf所指定的緩衝區,引數len則為緩衝區的長度; 引數flags為控制選項,一般設定為0或取以下值.

如果乙個資料報太長以至於緩衝區不能完全放下時,剩餘部分的數劇將可能被丟棄.

char recv_buf[buffersize];

if(recv(sockfd,recv_buf,sizeof(recv_buf),0)<0)

UDP套接字的資料傳輸 套接字的關閉

傳送資料 include include ssize t sendto int s,const void msg,size t len int flags,const struct sockaddr to,socklen t tolen 函式sendto的功能與引數send類似,但函式sendto不...

TCP的資料傳輸小結

通常每乙個互動按鍵都會產生乙個資料分組,也就是說,每次從客戶傳到伺服器的是乙個位元組的按鍵 而不是每次一行 通常tcp在接受到資料時並不立即傳送ack 相反,它推遲傳送,以便將ack與需要沿該方向傳送的資料一起傳送。絕大多數實現採用的時延為200ms,也就是說,tcp將以最大200ms的時延等待是否...

TCP中的可靠資料傳輸

前面我們講到了可靠資料傳輸的實現,而tcp就是一種可靠資料傳輸,因此我們有必要了解一下tcp中的可靠資料傳輸跟前面的回退n步和選擇重傳有什麼區別 首先,我們明確乙個概念,累積確認 累計確認跟前面的ack不太一樣,在tcp報文段中有乙個確認號字段,該欄位表示接收方希望接收到的下乙個報文段的序號,而tc...