C语言sendto()函数-经socket传送数据以及recvfrom函数《转》
头文件:#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);
}
}
执行:请参考recvfrom()
/*利用socket的UDPclient此程序会连线UDPserver,并将键盘输入的字符串传给server。UDPserver范例请参考sendto()。*/#include<sys/stat.h>#include<fcntl.h>#include<unistd.h>#include<sys/types.h>#include<sys/socket.h>#include<netinet/in.h>#include<arpa/inet.h>#definePORT2345#defineSERVER_IP“127.0.0.1”main(){ints,len;structsockaddr_inaddr;intaddr_len=sizeof(structsockaddr_in);charbuffer[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,(structsockaddr*)&addr,addr_len);/*接收server端返回的字符串*/len=recvfrom(s,buffer,sizeof(buffer),0,(structsockaddr*)&addr,(socklen_t*)&addr_len);printf(“receive:%s”,buffer);}}执行(先执行udpserver再执行udpclient)hello/*从键盘输入字符串*/receive:hello/*server端返回来的字符串*/C语言sendto()函数-经socket传送数据以及recvfrom函数《转》的更多相关文章
- 三十二:数据库之SQLAlchemy.query函数可查询的数据和聚合函数
准备工作 from sqlalchemy import create_engine, Column, Integer, String, Floatfrom sqlalchemy.ext.declara ...
- linux系统socket通信编程详解函数
linux socket编程之TCP与UDP TCP与UDP区别 TCP---传输控制协议,提供的是面向连接.可靠的字节流服务.当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之 ...
- 使用Python语言通过PyQt5和socket实现UDP服务器
前言 最近做了一个小软件,记录一下相关内容. 已有条件 现在已有一个硬件设备作为客户端(暂称其为"电路"). 基于SIM卡,电路可以通过UDP协议传输数据(程序已经内置在电路中), ...
- socket编程中客户端常用函数
1 常用函数 1.1 connect() int connect(int sockfd, const struct sockaddr *servaddr, socklen_taddrlen); 客 ...
- socket中send和recv函数
Socket一次Recv接受的字节有限制么? 从套接字接收数据. 返回值是表示接收数据的字符串. 一次接收的最大数据量由bufsize指定.它默认为零. 注意为了最好地匹配硬件和网络现实,bufsiz ...
- android 通过访问 php 接受 or 传送数据
先说传送数据,可以在 利用 php 代替传送,直接把 访问的url加上 xxx.php?informatin=xxxxxx 就行了 接收的看代码吧,详细注释. 首先是 我自己定义的php 文件 < ...
- 使用ViewBag传送数据从控制器至视图
前一篇<ASP.NET MVC读取XML并使用ViewData显示>http://www.cnblogs.com/insus/p/4308740.html 中,在控制器中使用了ViewDa ...
- Winsock系列函数 及 Socket通信流程
Socket是一种网络通信机制 Winsock系列函数 1. Socket 创建socket 2. Connect 尝试连接远端Socket 3. Send 在某个Socket 向远端 ...
- 黑马程序员——C语言基础语法 关键字 标识符 注释 数据及数据类型
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (一下内容是对黑马苹果入学视频的个人知识点总结) (一)C语言简单介绍 (1)C语言程序是由函数组成的任何C语言程序都是由一 ...
随机推荐
- week4_motion_of_ball_1(小球运动)——最基本
# Ball motion with an explicit timer import simplegui # Initialize globals width = 600 height = 600 ...
- ZOJ 3601 Unrequited Love 【STL__pair_的应用】
下面这个例子就是 STL:pair 的用法 #include <iostream> #include <utility> #include <string> usi ...
- ZOJ 1893 A Multiplication Game 【简单博弈】
感觉ZJU上有不少博弈的题目. 这道题目还是比较好理解的,题目大概意思是:两人轮流乘一个2-9的数,从1开始乘,求谁的乘积先大于N. 还是寻找必败点必胜点,不过在这个题目里转换成了寻找必败区间必胜区间 ...
- ubuntu中出现警告:Gtk-WARNING**: 无法在模块路径中找到主题引擎:“pixmap”
版本 ubuntu12.04 上一篇中提到使用中文输入法,但是我在使用的时候发现当我启动IBus的时候出现了警告,如图 这个如何是好呢? 最终万能的度娘告诉我这么解决 故障原因: gtk引擎出现了故障 ...
- ASP.NET MVC 5 学习教程:通过控制器访问模型的数据
原文 ASP.NET MVC 5 学习教程:通过控制器访问模型的数据 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连 ...
- 转:什么是 HTTP Headers?
什么是HTTP Headers HTTP是“Hypertext Transfer Protocol”的所写,整个万维网都在使用这种协议,几乎你在浏览器里看到的大部分内容都是通过http协议来传输的,比 ...
- INS-30001 ADMIN口令为空
1.错误描写叙述 2.错误原因 管理口令为空.导致出错 3.解决的方法 填写管理口令和确认口令
- C#如何在panl控件上添加Form窗体
. if (treeView1.SelectedNode.Text == "个人信息") { Form1 f4 = new Form1(); f4.TopLevel = false ...
- 一天一个类,一点也不累 之 Set接口
我们的口号是:一天一个类,一点也不累-- 再次回忆一下集合相关的类图. 官方API上这样介绍这个接口: A collection that contains no duplicate elements ...
- SuperSocket源码解析之配置系统
一 继承Net配置系统 Net应用程序配置机制跟程序集引用大致类似,均具有继承性,如iis几乎每个应用程序都会有一个Web.config,比如我们使用vs2012以上版本创建一个web应用程序会自带一 ...