?? 14.htm
字號(hào):
<TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>返回值 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋體 size=2>成功則返回接收到的字符數(shù),失敗則返回-1,錯(cuò)誤原因存于errno中。<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>錯(cuò)誤代碼 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋體 size=2>EBADF 參數(shù)s非合法的socket處理代碼<BR>EFAULT 參數(shù)中有一指針指向無法存取的內(nèi)存空間。<BR>ENOTSOCK 參數(shù)s為一文件描述詞,非socket。<BR>EINTR 被信號(hào)所中斷。<BR>EAGAIN 此動(dòng)作會(huì)令進(jìn)程阻斷,但參數(shù)s的socket為不可阻斷。<BR>ENOBUFS 系統(tǒng)的緩沖內(nèi)存不足<BR>ENOMEM 核心內(nèi)存不足<BR>EINVAL 傳給系統(tǒng)調(diào)用的參數(shù)不正確。<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>范例 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋體 size=2>/*利用socket的UDP client<BR>此程序會(huì)連線UDP server,并將鍵盤輸入的字符串傳給server。<BR>UDP server 范例請(qǐng)參考sendto()。<BR>*/<BR>#include<sys/stat.h><BR>#include<fcntl.h><BR>#include<unistd.h><BR>#include<sys/typs.h><BR>#include<sys/socket.h><BR>#include<netinet/in.h><BR>#include<arpa/inet.h><BR>#define PORT 2345<BR>#define SERVER_IP “127.0.0.1”<BR>main()<BR>{<BR>int s,len;<BR>struct sockaddr_in addr;<BR>int addr_len =sizeof(struct sockaddr_in);<BR>char buffer[256];<BR>/* 建立socket*/<BR>if((s = socket(AF_INET,SOCK_DGRAM,0))<0){<BR>perror(“socket”);<BR>exit(1);<BR>}<BR>/* 填寫sockaddr_in*/<BR>bzero(&addr,sizeof(addr));<BR>addr.sin_family = AF_INET;<BR>addr.sin_port = htons(PORT);<BR>addr.sin_addr.s_addr = inet_addr(SERVER_IP);<BR>while(1){<BR>bzero(buffer,sizeof(buffer));<BR>/* 從標(biāo)準(zhǔn)輸入設(shè)備取得字符串*/<BR>len =read(STDIN_FILENO,buffer,sizeof(buffer));<BR>/* 將字符串傳送給server端*/<BR>sendto(s,buffer,len,0,&addr,addr_len);<BR>/* 接收server端返回的字符串*/<BR>len = recvfrom(s,buffer,sizeof(buffer),0,&addr,&addr_len);<BR>printf(“receive: %s”,buffer);<BR>}<BR>}<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>執(zhí)行 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋體 size=2>(先執(zhí)行udp server 再執(zhí)行udp client)<BR>hello /*從鍵盤輸入字符串*/<BR>receive: hello /*server端返回來的字符串*/<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><BR><FONT face=宋體 size=2><A name=linuxc279></A></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2><BR></FONT></DIV></TD> <TD vAlign=top><FONT face=宋體 size=2><BR>recvmsg(經(jīng)socket接收數(shù)據(jù)) </FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>相關(guān)函數(shù) </FONT></DIV></TD> <TD vAlign=top><FONT face=宋體 size=2>recv,recvfrom,send,sendto,sendmsg,socket<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>表頭文件 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋體 size=2>#include<sys/types.h><BR>#include<sys/socktet.h><BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>定義函數(shù) </FONT></DIV></TD> <TD vAlign=top><FONT face=宋體 size=2>int recvmsg(int s,struct msghdr *msg,unsigned int flags);<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>函數(shù)說明 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋體 size=2>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ì)描述請(qǐng)參考send()。關(guān)于結(jié)構(gòu)msghdr的定義請(qǐng)參考sendmsg()。<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>返回值 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋體 size=2>成功則返回接收到的字符數(shù),失敗則返回-1,錯(cuò)誤原因存于errno中。<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>錯(cuò)誤代碼 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋體 size=2>EBADF 參數(shù)s非合法的socket處理代碼。<BR>EFAULT 參數(shù)中有一指針指向無法存取的內(nèi)存空間<BR>ENOTSOCK 參數(shù)s為一文件描述詞,非socket。<BR>EINTR 被信號(hào)所中斷。<BR>EAGAIN 此操作會(huì)令進(jìn)程阻斷,但參數(shù)s的socket為不可阻斷。<BR>ENOBUFS 系統(tǒng)的緩沖內(nèi)存不足<BR>ENOMEM 核心內(nèi)存不足<BR>EINVAL 傳給系統(tǒng)調(diào)用的參數(shù)不正確。<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>范例 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋體 size=2>參考recvfrom()。<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><BR><FONT face=宋體 size=2><A name=linuxc280></A></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2><BR></FONT></DIV></TD> <TD vAlign=top><FONT face=宋體 size=2><BR>send(經(jīng)socket傳送數(shù)據(jù)) </FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>相關(guān)函數(shù) </FONT></DIV></TD> <TD vAlign=top><FONT face=宋體 size=2>sendto,sendmsg,recv,recvfrom,socket<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>表頭文件 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋體 size=2>#include<sys/types.h><BR>#include<sys/socket.h><BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>定義函數(shù) </FONT></DIV></TD> <TD vAlign=top><FONT face=宋體 size=2>int send(int s,const void * msg,int len,unsigned int falgs);<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>函數(shù)說明 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋體 size=2>send()用來將數(shù)據(jù)由指定的socket 傳給對(duì)方主機(jī)。參數(shù)s為已建立好連接的socket。參數(shù)msg指向欲連線的數(shù)據(jù)內(nèi)容,參數(shù)len則為數(shù)據(jù)長(zhǎng)度。參數(shù)flags一般設(shè)0,其他數(shù)值定義如下<BR>MSG_OOB 傳送的數(shù)據(jù)以out-of-band 送出。<BR>MSG_DONTROUTE 取消路由表查詢<BR>MSG_DONTWAIT 設(shè)置為不可阻斷運(yùn)作<BR>MSG_NOSIGNAL 此動(dòng)作不愿被SIGPIPE 信號(hào)中斷。<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>返回值 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋體 size=2>成功則返回實(shí)際傳送出去的字符數(shù),失敗返回-1。錯(cuò)誤原因存于errno<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>錯(cuò)誤代碼 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋體 size=2>EBADF 參數(shù)s 非合法的socket處理代碼。<BR>EFAULT 參數(shù)中有一指針指向無法存取的內(nèi)存空間<BR>ENOTSOCK 參數(shù)s為一文件描述詞,非socket。<BR>EINTR 被信號(hào)所中斷。<BR>EAGAIN 此操作會(huì)令進(jìn)程阻斷,但參數(shù)s的socket為不可阻斷。<BR>ENOBUFS 系統(tǒng)的緩沖內(nèi)存不足<BR>ENOMEM 核心內(nèi)存不足<BR>EINVAL 傳給系統(tǒng)調(diào)用的參數(shù)不正確。<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>范例 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋體 size=2>參考connect()<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><BR><FONT face=宋體 size=2><A name=linuxc281></A></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2><BR></FONT></DIV></TD> <TD vAlign=top><FONT face=宋體 size=2><BR>sendmsg(經(jīng)socket傳送數(shù)據(jù)) </FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>相關(guān)函數(shù) </FONT></DIV></TD> <TD vAlign=top><FONT face=宋體 size=2>send,sendto,recv,recvfrom,recvmsg,socket<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>表頭文件 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋體 size=2>#include<sys/types.h><BR>#include<sys/socket.h><BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>定義函數(shù) </FONT></DIV></TD> <TD vAlign=top><FONT face=宋體 size=2>int sendmsg(int s,const strcut msghdr *msg,unsigned int flags);<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>函數(shù)說明 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋體 size=2>sendmsg()用來將數(shù)據(jù)由指定的socket傳給對(duì)方主機(jī)。參數(shù)s為已建立好連線的socket,如果利用UDP協(xié)議則不需經(jīng)過連線操作。參數(shù)msg 指向欲連線的數(shù)據(jù)結(jié)構(gòu)內(nèi)容,參數(shù)flags一般默認(rèn)為0,詳細(xì)描述請(qǐng)參考send()。<BR>結(jié)構(gòu)msghdr定義如下<BR>struct msghdr<BR>{<BR>void *msg_name; /*Address to send to /receive from . */<BR>socklen_t msg_namelen; /* Length of addres data */<BR>strcut iovec * msg_iov; /* Vector of data to send/receive into */<BR>size_t msg_iovlen; /* Number of elements in the vector */<BR>void * msg_control; /* Ancillary dat */<BR>size_t msg_controllen; /* Ancillary data buffer length */<BR>int msg_flags; /* Flags on received message */<BR>};<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>返回值 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋體 size=2>成功則返回實(shí)際傳送出去的字符數(shù),失敗返回-1,錯(cuò)誤原因存于errno<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>錯(cuò)誤代碼 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋體 size=2>EBADF 參數(shù)s 非合法的socket處理代碼。<BR>EFAULT 參數(shù)中有一指針指向無法存取的內(nèi)存空間<BR>ENOTSOCK 參數(shù)s為一文件描述詞,非socket。<BR>EINTR 被信號(hào)所中斷。<BR>EAGAIN 此操作會(huì)令進(jìn)程阻斷,但參數(shù)s的socket為不可阻斷。<BR>ENOBUFS 系統(tǒng)的緩沖內(nèi)存不足<BR>ENOMEM 核心內(nèi)存不足<BR>EINVAL 傳給系統(tǒng)調(diào)用的參數(shù)不正確。<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>范例 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋體 size=2>參考sendto()。<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><BR><FONT face=宋體 size=2><A name=linuxc282></A></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2><BR></FONT></DIV></TD> <TD vAlign=top><FONT face=宋體 size=2><BR>sendto(經(jīng)socket傳送數(shù)據(jù)) </FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>相關(guān)函數(shù) </FONT></DIV></TD> <TD vAlign=top><FONT face=宋體 size=2>send , sendmsg,recv , recvfrom , socket<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>表頭文件 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋體 size=2>#include < sys/types.h ><BR>#include < sys/socket.h ><BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>定義函數(shù) </FONT></DIV></TD> <TD vAlign=top><FONT face=宋體 size=2>int sendto ( int s , const void * msg, int len, unsigned int flags, const <BR>struct sockaddr * to , int tolen ) ;<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>函數(shù)說明 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋體 size=2>sendto() 用來將數(shù)據(jù)由指定的socket傳給對(duì)方主機(jī)。參數(shù)s為已建好連線的socket,如果利用UDP協(xié)議則不需經(jīng)過連線操作。參數(shù)msg指向欲連線的數(shù)據(jù)內(nèi)容,參數(shù)flags 一般設(shè)0,詳細(xì)描述請(qǐng)參考send()。參數(shù)to用來指定欲傳送的網(wǎng)絡(luò)地址,結(jié)構(gòu)sockaddr請(qǐng)參考bind()。參數(shù)tolen為sockaddr的結(jié)果長(zhǎng)度。<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>返回值 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋體 size=2>成功則返回實(shí)際傳送出去的字符數(shù),失敗返回-1,錯(cuò)誤原因存于errno 中。<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>錯(cuò)誤代碼 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋體 size=2>EBADF 參數(shù)s非法的socket處理代碼。<BR>EFAULT 參數(shù)中有一指針指向無法存取的內(nèi)存空間。<BR>WNOTSOCK canshu s為一文件描述詞,非socket。<BR>EINTR 被信號(hào)所中斷。<BR>EAGAIN 此動(dòng)作會(huì)令進(jìn)程阻斷,但參數(shù)s的soket為補(bǔ)課阻斷的。<BR>ENOBUFS 系統(tǒng)的緩沖內(nèi)存不足。<BR>EINVAL 傳給系統(tǒng)調(diào)用的參數(shù)不正確。<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋體 size=2>范例 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋體 size=2>#include < sys/types.h ><BR>#include < sys/socket.h ><BR># include <netinet.in.h><BR>#include <arpa.inet.h><BR>#define PORT 2345 /*使用的port*/<BR>main(){<BR>int sockfd,len;<BR>struct sockaddr_in addr;<BR>char buffer[256];<BR>/*建立socket*/<BR>if(sockfd=socket (AF_INET,SOCK_DGRAM,0))<0){<BR>perror (“socket”);<BR>exit(1);<BR>}<BR>/*填寫sockaddr_in 結(jié)構(gòu)*/<BR>bzero ( &addr, sizeof(addr) );<BR>addr.sin_family=AF_INET;<BR>addr.sin_port=htons(PORT);<BR>addr.sin_addr=hton1(INADDR_ANY)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -