资源描述:
《socket相关函数的介绍》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、1、recvfrom recvfrom函数(经socket接收数据): 函数原型:ssize_trecvfrom(intsockfd,void*buf,intlen,unsignedintflags,structsockaddr*from,socket_t*fromlen); ssize_t相当于int,socket_t相当于int,这里用这个名字为的是提高代码的自说明性。 相关函数recv,recvmsg,send,sendto,socket 函数说明:recv()用来接收远程主机经指定的socket传来的数据,并把数据传到由参数buf指向的内存空间,参数len为可接收
2、数据的最大长度.参数flags一般设0,其他数值定义参考recv().参数from用来指定欲传送的网络地址,结构sockaddr请参考bind()函数.参数fromlen为sockaddr的结构长度. 返回值:成功则返回接收到的字符数,失败返回-1. 错误代码 EBADF参数s非合法的socket处理代码 EFAULT参数中有一指针指向无法存取的内存空间。 ENOTSOCK参数s为一文件描述词,非socket。 EINTR被信号所中断。 EAGAIN此动作会令进程阻断,但参数s的socket为不可阻断。 ENOBUFS系统的缓冲内存不足 ENOMEM核心内存不足
3、 EINVAL传给系统调用的参数不正确。 范例 /*利用socket的UDPclient 此程序会连线UDPserver,并将键盘输入的字符串传给server。 UDPserver范例请参考sendto()。 */ #include #include #include #include #include #include #include #definePORT2345 #defineSE
4、RVER_IP“127.0.0.1” main() { ints,len; structsockaddr_inaddr; intaddr_len=sizeof(structsockaddr_in); charbuffer[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_p
5、ort=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,(structsockaddr*)&addr,addr_len); /*接收server端返回的字符串*/ len=recvfrom(s,buffer,sizeo
6、f(buffer),0,(structsockaddr*)&addr,&addr_len); printf(“receive:%s”,buffer); } } 执行(先执行udpserver再执行udpclient) hello/*从键盘输入字符串*/receive:hello/*server端返回来的字符串*/2、Socket 错误一览表关键词: Socket 错误 TCP/IP Windows VC 最近程序出现几次Socket错误,为了便于差错..搜了一些贴在这里
7、..出现网络联机错误Socket error #11001 表示您的计算机无法连上服务器,请检查您的Proxy设定以及Proxy相关账号,或暂时取消您防毒软件的「个人防火墙」。·出现网络联机错误Socket error #11004 应该是网络联机状态问题,请用户检查网络联机是否正常。·出现网络联机错误Socket error #10060ConnectionTimedOut 表示您与服务器发生联机逾时错误,请检查您的Proxy相关设定,以及ProxyServer是否