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

C语言send()函数:经socket传送数据
头文件:

#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 传给系统调用的参数不正确.

C语言sendto()函数:经socket传送数据
头文件:

#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);
  }
}

 

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c语言
socket
c语言sendto、c语言send函数、sendto函数、linux sendto函数、socket sendto函数,以便于您获取更多的相关知识。

时间: 2024-08-01 13:37:45

C语言中send()函数和sendto()函数的使用方法_C 语言的相关文章

C语言中while与do-while的介绍与注意事项_C 语言

一.while和do-while的简介  1). while语句  语法:  while(表达式){  循环体;  } 循环过程:  1.先判断表达式,是否为真,如果为真跳转到2,否则跳转到3  2.执行循环体,执行完毕,跳转到1  3.跳出循环 2). do-while语句 语法:  do{  循环体;   }while(表达式);  注意:这个while后面的小括号必须接; 循环过程:  1.先执行循环体,执行完毕跳转到2  2.判断表达式的结果是否为真,如果为真,跳转到1,否则跳转到3  

C语言中经socket接收数据的相关函数详解_C 语言

recv()函数:头文件: #include <sys/types.h> #include <sys/socket.h> 定义函数: int recv(int s, void *buf, int len, unsigned int flags); 函数说明:recv()用来接收远端主机经指定的socket 传来的数据, 并把数据存到由参数buf 指向的内存空间, 参数len 为可接收数据的最大长度. 参数 flags 一般设0. 其他数值定义如下: 1.MSG_OOB 接收以out

C++函数中return语句的使用方法_C 语言

C++中的return语句是函数中一个重要的语句,return语句用于结束当前正在执行的函数,并将控制权返回给调用此函数的函数. return语句有两种形式: return; return expression; 1.没有返回值的函数 不带返回值的return语句只能用于返回类型为void的函数,return语句是为了引起函数的强制结束,这种用法类似于循环结构中的break语句的作用. 例子: 复制代码 代码如下: void swap(int &v1,int &v2) { if(v1==v

解析Linux下的时间函数:设置以及获取时间的方法_C 语言

一.时间函数 复制代码 代码如下: time_t time(time_t *t);char *asctime(const struct tm *tm);char *asctime_r(const struct tm *tm, char *buf);char *ctime(const time_t *timep);char *ctime_r(const time_t *timep, char *buf);struct tm *gmtime(const time_t *timep); //获取的为英

浅析C语言中printf(),sprintf(),scanf(),sscanf()的用法和区别_C 语言

printf语法: #include <stdio.h>int printf( const char *format, ... ); printf()函数根据format(格式)给出的格式打印输出到STDOUT(标准输出)和其它参数中.返回值是输出的字符数量.sprintf语法: #include <stdio.h>int sprintf( char *buffer, const char *format, ... );sprintf()函数和printf()类似,格式控制完全一样

使用C语言递归与非递归实现字符串反转函数char *reverse(char *str)的方法_C 语言

代码如下所示: 复制代码 代码如下: // 递归实现字符串反转   char *reverse(char *str)   {    if( !str )    {     return NULL; }       int len = strlen(str);       if( len > 1 )       {           char ctemp =str[0];           str[0] = str[len-1];              str[len-1] = '/0';

C语言中#define与typedef的互换细节详解_C 语言

复制代码 代码如下: #include <stdio.h>/*<---------           #define    string    char *            ---->*/typedef   char *   string;       int main(void){   string   a[] = {"I", "like", "to", "fight,"},   b[] =

c语言-C语言中的rand()函数的问题

问题描述 C语言中的rand()函数的问题 代码如下,为什么a总是输出0,而b却能正常输出?rand()的返回值不是在0~RAND_MAX之间的整数吗? #include <stdlib.h> #include int main (void) { int a; int b; int i; for (i=0;i<5;i++) { a=10*rand()/RAND_MAX; printf ("a=%dn",a); } for (i=0;i<5;i++) { b=10

简述C语言中system()函数与vfork()函数的使用方法_C 语言

C语言system()函数:执行shell命令头文件: #include <stdlib.h> 定义函数: int system(const char * string); 函数说明:system()会调用fork()产生子进程, 由子进程来调用/bin/sh-c string 来执行参数string 字符串所代表的命令, 此命令执行完后随即返回原调用的进程. 在调用system()期间SIGCHLD 信号会被暂时搁置,SIGINT 和SIGQUIT 信号则会被忽略. 返回值: 1.如果 sy