sendto()_Linux C函数

本文深入解析了使用socket进行数据传输的原理与实现方法,包括关键函数sendto、send、recv等的使用方式及常见错误代码解释。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 <arpa.inet.h>
  #define PORT 2345 /*使用的port*/
  main(){
  int sockfd,len;
  struct sockaddr_in addr;
  char buffer[256];
  /*建立socket*/
  if(sockfd=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=hton1( INADDR_ANY ) ;
  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()

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值