最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言中經(jīng)socket接收數(shù)據(jù)的相關(guān)函數(shù)詳解

 更新時間:2015年09月06日 10:37:05   投稿:goldensun  
這篇文章主要介紹了C語言中經(jīng)socket接收數(shù)據(jù)的相關(guān)函數(shù)詳解,分別為recv()函數(shù)和recvfrom()函數(shù)以及recvmsg()函數(shù)的使用,需要的朋友可以參考下

recv()函數(shù):
頭文件:

#include <sys/types.h>  #include <sys/socket.h>

定義函數(shù):

int recv(int s, void *buf, int len, unsigned int flags);

函數(shù)說明:recv()用來接收遠(yuǎn)端主機(jī)經(jīng)指定的socket 傳來的數(shù)據(jù), 并把數(shù)據(jù)存到由參數(shù)buf 指向的內(nèi)存空間, 參數(shù)len 為可接收數(shù)據(jù)的最大長度.

參數(shù) flags 一般設(shè)0. 其他數(shù)值定義如下:
1、MSG_OOB 接收以out-of-band 送出的數(shù)據(jù).
2、MSG_PEEK 返回來的數(shù)據(jù)并不會在系統(tǒng)內(nèi)刪除, 如果再調(diào)用recv()會返回相同的數(shù)據(jù)內(nèi)容.
3、MSG_WAITALL 強(qiáng)迫接收到len 大小的數(shù)據(jù)后才能返回, 除非有錯誤或信號產(chǎn)生.
4、MSG_NOSIGNAL 此操作不愿被SIGPIPE 信號中斷返回值成功則返回接收到的字符數(shù), 失敗返回-1,錯誤原因存于errno 中.

錯誤代碼:
   EBADF 參數(shù)s 非合法的socket 處理代碼
   EFAULT 參數(shù)中有一指針指向無法存取的內(nèi)存空間
   ENOTSOCK 參數(shù)s 為一文件描述詞, 非socket.
   EINTR 被信號所中斷
   EAGAIN 此動作會令進(jìn)程阻斷, 但參數(shù)s 的socket 為不可阻斷
   ENOBUFS 系統(tǒng)的緩沖內(nèi)存不足.
   ENOMEM 核心內(nèi)存不足
   EINVAL 傳給系統(tǒng)調(diào)用的參數(shù)不正確.

recvfrom()函數(shù):
頭文件:

#include <sys/types.h>  #include <sys/socket.h>

定義函數(shù):

int recvfrom(int s, void *buf, int len, unsigned int flags, struct sockaddr *from,int *fromlen);

函數(shù)說明:recv()用來接收遠(yuǎn)程主機(jī)經(jīng)指定的socket 傳來的數(shù)據(jù), 并把數(shù)據(jù)存到由參數(shù)buf 指向的內(nèi)存空間, 參數(shù)len 為可接收數(shù)據(jù)的最大長度. 參數(shù)flags 一般設(shè)0, 其他數(shù)值定義請參考recv(). 參數(shù)from 用來指定欲傳送的網(wǎng)絡(luò)地址, 結(jié)構(gòu)sockaddr 請參考bind(). 參數(shù)fromlen 為sockaddr 的結(jié)構(gòu)長度.

返回值:成功則返回接收到的字符數(shù), 失敗則返回-1, 錯誤原因存于errno 中.

錯誤代碼:
   EBADF 參數(shù)s 非合法的socket 處理代碼
   EFAULT 參數(shù)中有一指針指向無法存取的內(nèi)存空間.
   ENOTSOCK 參數(shù)s 為一文件描述詞, 非socket.
   EINTR 被信號所中斷.
   EAGAIN 此動作會令進(jìn)程阻斷, 但參數(shù)s 的socket 為不可阻斷.
   ENOBUFS 系統(tǒng)的緩沖內(nèi)存不足
   ENOMEM 核心內(nèi)存不足
   EINVAL 傳給系統(tǒng)調(diào)用的參數(shù)不正確.

范例:
/*利用socket 的UDP client此程序會連線UDP server, 并將鍵盤輸入的字符串傳給server.
UDP server 范例請參考sendto (). */

#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/typs.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define PORT 2345
#define SERVER_IP "127.0.0.1"
main()
{
  int s, len;
  struct sockaddr_in addr;
  int addr_len = sizeof(struct sockaddr_in);
  char buffer[256];
  //建立socket
  if((s = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
  {
    perror("socket");
    exit(1);
  }
  //填寫sockaddr_in
  bzero(&addr, sizeof(addr));
  addr.sin_family = AF_INET;
  addr.sin_port = htons(PORT);
  addr.sin_addr.s_addr = inet_addr(SERVER_IP);
  while(1)
  {
    bzero(buffer, sizeof(buffer));
    //從標(biāo)準(zhǔn)輸入設(shè)備取得字符串
    len = read(STDIN_FILENO, buffer, sizeof(buffer));
    //將字符串傳送給server 端
    sendto(s, buffer, len, 0, &addr, addr_len);
    //接收server 端返回的字符串
    len = recvfrom(s, buffer, sizeof(buffer), 0, &addr, &addr_len);
    printf("receive: %s", buffer);
  }
}

執(zhí)行(先執(zhí)行udp server 再執(zhí)行udp client):

hello //從鍵盤輸入字符串
receive: hello //server 端返回來的字符串

recvmsg()函數(shù):
頭文件:

#include <sys/types.h>  #include <sys/socktet.h>

定義函數(shù):

int recvmsg(int s, struct msghdr *msg, unsigned int flags);

函數(shù)說明:recvmsg()用來接收遠(yuǎn)程主機(jī)經(jīng)指定的socket 傳來的數(shù)據(jù). 參數(shù)s 為已建立好連線的socket, 如果利用UDP 協(xié)議則不需經(jīng)過連線操作. 參數(shù)msg 指向欲連線的數(shù)據(jù)結(jié)構(gòu)內(nèi)容, 參數(shù)flags 一般設(shè)0, 詳細(xì)描述請參考send(). 關(guān)于結(jié)構(gòu)msghdr 的定義請參考sendmsg().

返回值:成功則返回接收到的字符數(shù), 失敗則返回-1, 錯誤原因存于errno 中.

錯誤代碼:
   EBADF 參數(shù)s 非合法的socket 處理代碼.
   EFAULT 參數(shù)中有一指針指向無法存取的內(nèi)存空間
   ENOTSOCK 參數(shù)s 為一文件描述詞, 非socket.
   EINTR 被信號所中斷.
   EAGAIN 此操作會令進(jìn)程阻斷, 但參數(shù)s 的socket 為不可阻斷.
   ENOBUFS 系統(tǒng)的緩沖內(nèi)存不足
   ENOMEM 核心內(nèi)存不足
   EINVAL 傳給系統(tǒng)調(diào)用的參數(shù)不正確.

相關(guān)文章

  • 詳解C++作用域與生命周期

    詳解C++作用域與生命周期

    這篇文章主要介紹了C++作用域與生命周期的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)c++,感興趣的朋友可以了解下
    2020-08-08
  • 一起來學(xué)習(xí)C++的動態(tài)內(nèi)存管理

    一起來學(xué)習(xí)C++的動態(tài)內(nèi)存管理

    這篇文章主要為大家詳細(xì)介紹了C++的動態(tài)內(nèi)存管理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • C++常量詳解一(常量指針與常量引用的初始化)

    C++常量詳解一(常量指針與常量引用的初始化)

    這篇文章主要介紹了C++常量詳解一(常量指針與常量引用的初始化),需要的朋友可以參考下
    2017-06-06
  • C語言實現(xiàn)返回字符串函數(shù)的四種方法

    C語言實現(xiàn)返回字符串函數(shù)的四種方法

    在C語言中實現(xiàn)函數(shù)返回字符串,首先要確定函數(shù)返回的字符串地址的來源,一般分為四種方式,下面這篇文章就給大家通過示例代碼詳細(xì)介紹這幾種方法,有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-12-12
  • C語言全面細(xì)致精講關(guān)鍵字的使用

    C語言全面細(xì)致精講關(guān)鍵字的使用

    關(guān)鍵字是C語言非常重要的一部分,熟練的掌握和使用關(guān)鍵字有助于我們更加熟悉了解C語言,同時C語言的關(guān)鍵字也是面試筆試中??嫉膬?nèi)容。C語言的關(guān)鍵字共有32個,但并不是每個關(guān)鍵字都有坑,本篇文章將通過理論聯(lián)系實際的方式為大家講解C語言中易混易錯以及??嫉囊恍╆P(guān)鍵字
    2022-05-05
  • C語言數(shù)據(jù)結(jié)構(gòu)與算法之時間空間復(fù)雜度入門

    C語言數(shù)據(jù)結(jié)構(gòu)與算法之時間空間復(fù)雜度入門

    這篇文章主要為大家介紹了C語言數(shù)據(jù)結(jié)構(gòu)與算法之時間空間復(fù)雜度的入門教程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-02-02
  • CMakeList中自動編譯protobuf文件過程

    CMakeList中自動編譯protobuf文件過程

    這篇文章主要介紹了CMakeList中自動編譯protobuf文件過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • C語言實現(xiàn)CRC校驗算法的示例詳解

    C語言實現(xiàn)CRC校驗算法的示例詳解

    CRC(Cyclic Redundancy Check,循環(huán)冗余校驗)是一種常用的錯誤檢測技術(shù),用于驗證數(shù)據(jù)在傳輸或存儲過程中是否發(fā)生了錯誤,本文主要介紹了C語言如何實現(xiàn)CRC校驗算法,需要的可以參考一下
    2023-08-08
  • C語言實現(xiàn)將字符串轉(zhuǎn)換成整數(shù)

    C語言實現(xiàn)將字符串轉(zhuǎn)換成整數(shù)

    這篇文章主要為大家詳細(xì)介紹了如何用C語言寫一個函數(shù),把字符串轉(zhuǎn)換成整數(shù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • 如何解決C語言,函數(shù)名與宏沖突

    如何解決C語言,函數(shù)名與宏沖突

    本文介紹了“如何解決C語言,函數(shù)名與宏沖突”,需要的朋友可以參考一下
    2013-03-03

最新評論

玉林市| 德安县| 灌阳县| 县级市| 建宁县| 河源市| 台前县| 梧州市| 青浦区| 铁力市| 区。| 齐齐哈尔市| 衡阳市| 七台河市| 乌鲁木齐县| 鄂托克前旗| 固安县| 永和县| 鹤峰县| 泽普县| 秦皇岛市| 玉山县| 东方市| 琼海市| 宁波市| 南开区| 庄浪县| 全州县| 石渠县| 江西省| 大邑县| 泾川县| 宁城县| 铜鼓县| 景谷| 繁昌县| 黑河市| 南丹县| 泗洪县| 武隆县| 昭觉县|