源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

C语言中send()函数和sendto()函数的使用方法

  • 时间:2021-09-19 07:45 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:C语言中send()函数和sendto()函数的使用方法
[b]C语言send()函数:经socket传送数据 [/b]头文件:
#include <sys/types.h>  #include <sys/socket.h>
定义函数:
int send(int s, const void * msg, int len, unsigned int falgs);
函数说明:send()用来将数据由指定的socket 传给对方主机. 参数s 为已建立好连接的socket. 参数msg 指向欲连线的数据内容, 参数len 则为数据长度. 参数flags 一般设0, 其他数值定义如下:    MSG_OOB 传送的数据以out-of-band 送出.    MSG_DONTROUTE 取消路由表查询    MSG_DONTWAIT 设置为不可阻断运作    MSG_NOSIGNAL 此动作不愿被SIGPIPE 信号中断. 返回值:成功则返回实际传送出去的字符数, 失败返回-1. 错误原因存于errno 错误代码:    EBADF 参数s 非合法的socket 处理代码.    EFAULT 参数中有一指针指向无法存取的内存空间    ENOTSOCK 参数s 为一文件描述词, 非socket.    EINTR 被信号所中断.    EAGAIN 此操作会令进程阻断, 但参数s 的socket 为不可阻断.    ENOBUFS 系统的缓冲内存不足    ENOMEM 核心内存不足    EINVAL 传给系统调用的参数不正确. [b]C语言sendto()函数:经socket传送数据 [/b]头文件:
#include <sys/types.h>  #include <sys/socket.h>
定义函数:int sendto(int 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 中. 错误代码: 1、EBADF 参数s 非法的socket 处理代码. 2、EFAULT 参数中有一指针指向无法存取的内存空间. 3、WNOTSOCK canshu s 为一文件描述词, 非socket. 4、EINTR 被信号所中断. 5、EAGAIN 此动作会令进程阻断, 但参数s 的soket 为补课阻断的. 6、ENOBUFS 系统的缓冲内存不足. 7、EINVAL 传给系统调用的参数不正确. 范例
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet.in.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)
  {
    bezro(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);
  }
}
 
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部