日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux下Socket 函数集(三)

發布時間:2024/9/20 linux 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux下Socket 函数集(三) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

ntohl(將32位網絡字符順序轉換成主機字符順序)
相關函數 htonlhtonsntohs
表頭文件 #include<netinet/in.h>
定義函數 unsigned long int ntohl(unsigned long int netlong);
函數說明 ntohl()用來將參數指定的32netlong轉換成主機字符順序。
返回值 返回對應的主機字符順序。
范例 參考getservent()
ntohs(將16位網絡字符順序轉換成主機字符順序)
相關函數 htonlhtonsntohl
表頭文件 #include<netinet/in.h>
定義函數 unsigned short int ntohs(unsigned short int netshort);
函數說明 ntohs()用來將參數指定的16netshort轉換成主機字符順序。
返回值 返回對應的主機順序。
范例 參考getservent()
recv(經socket接收數據)
相關函數 recvfromrecvmsgsendsendtosocket
表頭文件 #include<sys/types.h> #include<sys/socket.h>
定義函數 int recv(int s,void *buf, int len, unsigned int flags);
函數說明 recv()用來接收遠端主機經指定的socket傳來的數據,并把數據存到由參數buf?指向的內存空間,參數len為可接收數據的最大長度。
參數 返回值 flags一般設0。其他數值定義如下: MSG_OOB接收以out-of-band?送出的數據。 MSG_PEEK返回來的數據并不會在系統內刪除,如果再調用recv()會返回相同的數據內容。 MSG_WAITALL強迫接收到len大小的數據后才能返回,除非有錯誤或信號產生。 MSG_NOSIGNAL此操作不愿被SIGPIPE信號中斷返回值成功則返回接收到的字符數,失敗返回-1,錯誤原因存于errno中。
錯誤代碼 EBADF參數s非合法的socket處理代碼 FAULT參數中有一指針指向無法存取的內存空間 ENOTSOCK參數s為一文件描述詞,非socket EINTR被信號所中斷 EAGAIN此動作會令進程阻斷,但參數ssocket為不可阻斷 ENOBUFS系統的緩沖內存不足。 ENOMEM核心內存不足 EINVAL傳給系統調用的參數不正確。
范例 參考listen()
recvfrom(經socket接收數據)
相關函數 recvrecvmsgsendsendtosocket
表頭文件 #include<sys/types.h> #include<sys/socket.h>
定義函數 int recvfrom(int s,void *buf,int len,unsigned int flags ,struct sockaddr *from ,int *fromlen);
函數說明 recv()用來接收遠程主機經指定的socket?傳來的數據,并把數據存到由參數buf?指向的內存空間,參數len?為可接收數據的最大長度。參數flags?一般設0,其他數值定義請參考recv()。參數from用來指定欲傳送的網絡地址,結構sockaddr?請參考bind()。參數fromlensockaddr的結構長度。
返回值 成功則返回接收到的字符數,失敗則返回-1,錯誤原因存于errno中。
錯誤代碼 EBADF參數s非合法的socket處理代碼 EFAULT參數中有一指針指向無法存取的內存空間。 ENOTSOCK參數s為一文件描述詞,非socket EINTR被信號所中斷。 EAGAIN此動作會令進程阻斷,但參數ssocket為不可阻斷。 ENOBUFS系統的緩沖內存不足 ENOMEM核心內存不足 EINVAL傳給系統調用的參數不正確。
范例 /*利用socketUDP 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)); /*?從標準輸入設備取得字符串*/ 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); } }
執行 (先執行udp server?再執行udp client) hello /*從鍵盤輸入字符串*/ receive: hello /*server端返回來的字符串*/
recvmsg(經socket接收數據)
相關函數 recvrecvfromsendsendtosendmsgsocket
表頭文件 #include<sys/types.h> #include<sys/socktet.h>
定義函數 int recvmsg(int s,struct msghdr *msg,unsigned int flags);
函數說明 recvmsg()用來接收遠程主機經指定的socket傳來的數據。參數s為已建立好連線的socket,如果利用UDP協議則不需經過連線操作。參數msg指向欲連線的數據結構內容,參數flags一般設0,詳細描述請參考send()。關于結構msghdr的定義請參考sendmsg()
返回值 成功則返回接收到的字符數,失敗則返回-1,錯誤原因存于errno中。
錯誤代碼 EBADF參數s非合法的socket處理代碼。 EFAULT參數中有一指針指向無法存取的內存空間 ENOTSOCK參數s為一文件描述詞,非socket EINTR被信號所中斷。 EAGAIN此操作會令進程阻斷,但參數ssocket為不可阻斷。 ENOBUFS系統的緩沖內存不足 ENOMEM核心內存不足 EINVAL傳給系統調用的參數不正確。
范例 參考recvfrom()

?
?
?
?
?
?
?

轉載于:https://blog.51cto.com/yiluohuanghun/950653

總結

以上是生活随笔為你收集整理的Linux下Socket 函数集(三)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。