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. jqgrid如何渲染表格数据_jqgrid,jquery_jqGrid pivot 增加分项小计,jqgrid,jquery,jquery插件,javascript,表格 - phpStudy...
  2. Html一修改就会自动刷新,web 前端修改 自动刷新 插件使用 liveReload
  3. 如何应用设计模式设计你的足球引擎
  4. Java 注解深入理解
  5. Oracle单行函数
  6. PHP如何连接MySQL数据库
  7. 用dotnet自带的mail类发邮件出现的问题
  8. 微服务架构设计模式~根据业务能力进行服务拆分
  9. 搞懂nginx的proxy模块-01
  10. Windows10桌面美化推荐之Dock栏
  11. 排列组合在计算机科学的应用,数学在计算机科学的应用.doc
  12. 奇安信代码安全实验室帮助微软修复远程内核级漏洞,获官方致谢
  13. HighCharts:隐藏最下方logo
  14. 安卓工程师转行JAVA_转行|如何成为企业想要的Android工程师
  15. ps核心工具-可选颜色
  16. 刘毅5000词汇_不熟词汇整理_lesson_15 and part_1
  17. 网络:简述计算机网络的性能指标和非性能特征
  18. 消息轰炸(python)
  19. python自动化测试平台方案_基于Python的软件测试自动化平台研究
  20. 下载分享永不关机 几步玩转家庭NAS组建

热门文章

  1. http中的反盗链技术的例子实现
  2. 哈工大计算机科学与技术新院长,计算机学院2017级新生开学典礼顺利召开
  3. 雷神:音视频入门基础——000
  4. 网络营销推广怎么做太极营销系列道法自然篇
  5. 播放器service使用
  6. 思科设备中DHCP 服务的配置
  7. 天下英雄莫能当——李世民之虎牢关之战
  8. 机器学习——支持向量回归(SVR)
  9. 一个源于地下龙的游戏创建角色程序
  10. 18则幽默段子,让你秒懂经济和金融!