Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1351998
  • 博文数量: 1334
  • 博客积分: 645
  • 博客等级: 上士
  • 技术积分: 5762
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-25 16:56
文章分类

全部博文(1334)

文章存档

2014年(108)

2013年(1059)

2012年(169)

分类: LINUX

2013-01-18 19:36:46

 sendto(经socket传送数据)相关函数  send , sendmsg,recv , recvfrom , socket表头文件  #include < sys/types.h >   #include < sys/socket.h >定义函数  int sendto ( socket s , const void * msg, int len, unsigned int flags, const   struct sockaddr * to , int tolen ) ;函数说明   sendto() 用来将数据由指定的socket传给对方主机。参数s为已建好连线的socket,如果利用UDP协议则不需经过连线操作。参数msg指向欲连线的数据内 容,参数flags 一般设0,详细描述请参考send()。参数to用来指定欲传送的网络地址,结构sockaddr请参考bind()。参数tolen为sockaddr 的结果长度。返回值  成功则返回实际传送出去的字符数,失败返回-1,错误原因存于errno 中。错误代码  EBADF 参数s非法的socket处理代码。
   EFAULT 参数中有一指针指向无法存取的内存空间。
   WNOTSOCK 参数 s为一文件描述词,非socket。
   EINTR 被信号所中断。
   EAGAIN 此动作会令进程阻断,但参数s的socket为不可阻断的。
   ENOBUFS 系统的缓冲内存不足。
   EINVAL 传给系统调用的参数不正确。范例  #include < sys/types.h >
  #include < sys/socket.h >
  #include
   #define PORT 2345 /*使用的port*/
  main(){
   int sockfd,len;
  struct sockaddr_in addr;
  char buffer[256];   /*建立socket*/
  if(sockfd=socket (,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=hton1() ;
  if (bind(sockfd, &addr, sizeof(addr))<0){
  perror(“connect”);
  exit(1);
  }
  while(1){
  bzero(buffer,sizeof(buffer));
  len = recvfrom(socket,buffer,sizeof(buffer), 0 , &addr &addr_len);   /*显示client端的网络地址*/
   printf(“receive from %s\n “ , inet_ntoa( addr.sin_addr));   /*将字串返回给client端*/      

        sendto(sockfd,buffer,len,0,&addr,addr_len);”
   }
  }  
 执行 请参考recvfrom()
阅读(177) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~