sendto(经socket传送数据)

相关函数

send , sendmsg,recv , recvfrom , 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 中。

错误代码

EBADF 参数s非法的socket处理代码。

EFAULT 参数中有一指针指向无法存取的内存空间。

WNOTSOCK canshu s为一文件描述词,非socket。

EINTR 被信号所中断。

EAGAIN 此动作会令进程阻断,但参数s的soket为补课阻断的。

ENOBUFS 系统的缓冲内存不足。

EINVAL 传给系统调用的参数不正确。

recvfrom(经socket接收数据)

相关函数

recv,recvmsg,send,sendto,socket

表头文件

#include

#include

定义函数

int recvfrom(int s,void *buf,int len,unsigned int flags ,struct sockaddr *from ,int *fromlen);

函数说明

recv()用来接收远程主机经指定的socket 传来的数据,并把数据存到由参数buf 指向的内存空间,参数len 为可接收数据的最大长度。参数flags 一般设0,其他数值定义请参考recv()。参数from用来指定欲传送的网络地址,结构sockaddr 请参考bind()。参数fromlen为sockaddr的结构长度。

返回值

成功则返回接收到的字符数,失败则返回-1,错误原因存于errno中。

错误代码

EBADF 参数s非合法的socket处理代码

EFAULT 参数中有一指针指向无法存取的内存空间。

ENOTSOCK 参数s为一文件描述词,非socket。

EINTR 被信号所中断。

EAGAIN 此动作会令进程阻断,但参数s的socket为不可阻断。

ENOBUFS 系统的缓冲内存不足

ENOMEM 核心内存不足

EINVAL 传给系统调用的参数不正确。

server.c

#include

#include

#include

#include

#include

#include

#include

#include

#define PORT 1111 /*使用的port*/

main(){

int sockfd,len;

struct sockaddr_in addr;

int addr_len = sizeof(struct sockaddr_in);

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.s_addr=htonl(INADDR_ANY) ;

if (bind(sockfd, (struct sockaddr *)&addr, sizeof(addr))<0){

perror("connect");

exit(1);

}

while(1){

bzero(buffer,sizeof(buffer));

len = recvfrom(sockfd,buffer,sizeof(buffer), 0 , (struct sockaddr *)&addr ,&addr_len);

/*显示client端的网络地址*/

printf("receive from %s\n" , inet_ntoa( addr.sin_addr));

/*将字串返回给client端*/

sendto(sockfd,buffer,len,0,(struct sockaddr *)&addr,addr_len);

}

}

client.c

#include

#include

#include

#include

#include

#include

#include

#include

#define PORT 1111

#define SERVER_IP "127.0.0.1"

main()

{

int s,len;

struct sockaddr_in addr;

int addr_len =sizeof(struct sockaddr_in);

char buffer[256];

/* 建立socket*/

if((s = 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.s_addr = inet_addr(SERVER_IP);

while(1){

bzero(buffer,sizeof(buffer));

/* 从标准输入设备取得字符串*/

len =read(STDIN_FILENO,buffer,sizeof(buffer));

/* 将字符串传送给server端*/

sendto(s,buffer,len,0,(struct sockaddr *)&addr,addr_len);

/* 接收server端返回的字符串*/

len = recvfrom(s,buffer,sizeof(buffer),0,(struct sockaddr *)&addr,&addr_len);

printf("receive: %s",buffer);

}

}

此实例为无连接UDP,也可用connect函数实现已连接UDP.

(笔记以实例为主,详细理论见<>)

linux sendto recvfrom 异常退出,linux c学习笔记----UDP基础客户/服务编程(sendto,recvfrom)...相关推荐

  1. C基础学习笔记——01-C基础第02天(用户权限、VI操作、Linux服务器搭建)

    在学习C基础总结了笔记,并分享出来.有问题请及时联系博主:Alliswell_WP,转载请注明出处. 01-C基础第02天(用户权限.VI操作.Linux服务器搭建) 打开终端:ctrl+alt+t ...

  2. Linux学习笔记(3)- 网络编程以及范例程序

    Linux学习笔记(3)- 网络编程以及范例程序 前言 网络介绍 IP地址的介绍 端口和端口号的介绍 通信流程 socket介绍 TCP介绍 python3编码转换 TCP客户端程序开发流程 多任务版 ...

  3. C++ 【学习笔记】 - 基础(class、inline、explict、new、delete、static、this、mutable、friend、operator、virtual)

    上上一篇:java全家桶 上一篇:C语言 [学习笔记] - 基础.理论(原码/反码/补码).函数(字符串.定义).指针.内存(函数.结构).复合类型.函数(调用原理.指针.接口) 视频:https:/ ...

  4. 学习笔记:SpringCloud 微服务技术栈_实用篇①_基础知识

    若文章内容或图片失效,请留言反馈.部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 前言 学习视频链接 SpringCloud + RabbitMQ + Docker + Redis + 搜 ...

  5. Docker:学习笔记(1)——基础概念

    Docker:学习笔记(1)--基础概念 Docker是什么 软件开发后,我们需要在测试电脑.客户电脑.服务器安装运行,用户计算机的环境各不相同,所以需要进行各自的环境配置,耗时耗力.为了解决这个问题 ...

  6. Java学习笔记之基础篇

    Java学习笔记之基础篇 目录 Java如何体现平台的无关性? 面向对象(OO)的理解 面向对象和面向过程编程的区别 面向对象三大特征 静态绑定和动态绑定(后期绑定) 延伸:类之间的关系 组合(聚合) ...

  7. SAS学习笔记1——基础知识(库、PDV、变量选择、观测值排序、创建新变量

    SAS学习笔记1--基础知识 1.逻辑库.临时库.永久库 2.数据步 2.1数据步语法 2.2 数据步的编译和执行过程 2.3变量的选择 2.3.1 keep和drop语句 2.4变量的重命名rena ...

  8. Python学习笔记_1_基础_2:数据运算、bytes数据类型、.pyc文件(什么鬼)

    Python学习笔记_1_基础_2:数据运算.bytes数据类型..pyc文件(什么鬼) 一.数据运算 Python数据运算感觉和C++,Java没有太大的差异,百度一大堆,这里就不想写了.比较有意思 ...

  9. Sharepoin学习笔记—架构系列—Sharepoint服务(Services)与服务应用程序框架(Service Application Framework) 1

    Sharepoin学习笔记-架构系列-Sharepoint服务(Services)与服务应用程序框架(Service Application Framework) 1 Sharepoint服务是Sha ...

最新文章

  1. 简单的一点总结:关于优惠券功能
  2. Linux ifconfig命令
  3. HBase数据存储格式
  4. bbb sdk6 ll_rw_block分析
  5. Matplotlib使用指南
  6. 如何新建Spring Boot工程
  7. java中double类型占几个字节_Java中基本数据类型占几个字节多少位
  8. 华为交换机 tagged 与 untagged 的关系、H5C 开web管理、telnet管理
  9. poj3259 Wormholes floyd求负环
  10. 如何用PPT制作一份数据图表?
  11. 必须学会的几道家常菜
  12. 软电话对接鼎信DWG无线网关
  13. html知识点总结1
  14. 红米手机4android os是木马怎么清除,红米Note4 的LineageOS14.1刷机包 安卓7.1.1原生风格 本地化 20180203更新...
  15. 马赛克与反马赛克技术
  16. 关于事务(transaction)
  17. 复现lio_sam激光slam算法创建点云地图
  18. 炉石android更新日志,炉石传说18.4版本更新了什么?18.4版本更新内容汇总[多图]...
  19. openlayer3 系列 4 - 加载天地图
  20. EtherCAT总线通信架构模型以及CoE参考模型解析

热门文章

  1. 基于埋点日志数据的网络流量统计(网站总浏览量(PV)的统计)
  2. 爱普生打印机共享连接0xc0000011b代码 680kII连接问题
  3. ASP.NET Core MVC 和 EF Core 教程 - 创建、读取、更新和删除
  4. Drupal安装及使用问题解决列表
  5. R语言使用dweibull函数生成威布尔(韦伯分布)分布密度数据、使用plot函数可视化威布尔分布密度数据(Weibull Distribution)
  6. 使用Nginx搭建Http文件服务器
  7. 象棋机器人夹伤7岁男孩手指,软件测试工程师的锅?我笑了。。。
  8. 神经网络的核心——寻优Wi权重系数
  9. xml与json互相转换
  10. ArcGIS Engine开发学习(2)控件的使用案例