Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1330493
  • 博文数量: 284
  • 博客积分: 3251
  • 博客等级: 中校
  • 技术积分: 3046
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-26 17:23
文章分类

全部博文(284)

文章存档

2019年(2)

2018年(5)

2015年(19)

2014年(13)

2013年(10)

2012年(235)

分类: LINUX

2012-05-15 18:13:20

 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()
阅读(9600) | 评论(1) | 转发(1) |
0

上一篇:tm结构类型

下一篇:man 命令

给主人留下些什么吧!~~

shinyshiny2015-05-12 21:18:12

你好,我想问,这里send函数中的第二个参数msg类型必须是char行吗,可以是float型吗?若不可以,那么若想发送的是float型数组,该怎么改呢。。。我改的一直报错。。。请赐教,谢谢!