資訊傳送函式send

2021-08-31 06:07:47 字數 787 閱讀 4275

資訊傳送函式send

用connect函式連線到遠端計算機以後,可以用send函式將資訊傳送到對方的計算機。這個函式的使用方法如下所示。

int send(int s,const void * msg,int len,unsigned int flags);

在引數列表中,s表示已經建立的socket,msg是需要傳送資料的指標,len表示需要傳送資料的長度。這個長度可以用sizeof函式來取得,引數flags一般設定為0,可能的賦值與含義如下所示。

 msg_oob:傳送的資料以out-of-band的方式送出。

 msg_dontroute:取消路由表查詢。

 msg_dontwait:設定為不可阻斷傳輸。

 msg_nosignal:此傳輸不可被sigpipe訊號中斷。

如果傳送資料成功,函式會返回已經傳送的字元個數,否則會返回-1。函式可能發生下面這些錯誤,可以用errno來捕獲函式的錯誤。

 ebadf:引數s不是乙個正確的socket。

 efault:引數中的指標指向了不可讀取的記憶體空間。

 enotsock:引數s是乙個檔案,而不是乙個socket。

 eintr:被訊號中斷。

 eagain:此操作會中斷程序,但socket不允許中斷。

 enobufs:系統的緩衝記憶體不足。

 enomem:核心記憶體不足。

 einval:傳給系統呼叫的引數不正確。

在使用這個函式前,需要在程式的最前面包含下面的標頭檔案。

send函式可以直接傳送結構體嗎?

網路通訊程式設計中,常常用結構體對待傳送的資料進行封裝。比如,struct msg cmd表示命令,遠端會根據cmd進行不同的處理 extradata是要傳送的陣列 len則表示extradata的占用的記憶體位元組數。在這種設計下,當需要傳送資料時,把根據資料長度增加整個struct msg的記憶...

send函式阻塞

tcp協議本身是可靠的,並不等於應用程式用tcp傳送資料就一定是可靠的.不管是否阻塞,send傳送的大小,並不代表對端recv到多少的資料.在阻塞模式 下,send函式的過程是將應用程式請求傳送的資料拷貝到傳送快取中傳送就返回.但由於傳送快取的存在,表現為 如果傳送快取大小比請求傳送的大小要大,那麼...

send函式詳解

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!服務端都已經accept了客戶端的請求,於是客戶端與服務端也就勾搭上了,可以曖昧了,可以發資訊了,怎麼傳送呢?用send函式即可,我們來看看send函式的原型 winsock api linkageintwsaapisend socket s,co...