sendto

头文件

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

参数说明
s:一个标识套接口的描述字。 
buf:包含待发送数据的缓冲区。 
len:buf缓冲区中数据的长度。 
flags:调用方式标志位。 
to:(可选)指针,指向目的套接口的地址。 
tolen:to所指地址的长度。

函数说明

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

头文件

#include <sys/types.h>   #include <sys/socket.h>

定义函数

int PASCAL FAR recvfrom( SOCKET s, char FAR* buf, int len, int flags, struct sockaddr FAR* from, int FAR* fromlen);

参数说明

s:标识一个已连接套接口的描述字。 
buf:接收数据缓冲区。 
len:缓冲区长度。 
flags:调用操作方式。 
from:(可选)指针,指向装有源地址的缓冲区。 
fromlen:(可选)指针,指向from缓冲区长度值。
 
返回值: 
若无错误发生,recvfrom()返回读入的字节数。如果连接已中止,返回0。否则的话,返回SOCKET_ERROR错误,应用程序可通过WSAGetLastError()获取相应错误代码。 
错误代码: 
WSANOTINITIALISED:在使用此API之前应首先成功地调用WSAStartup()。 
WSAENETDOWN:WINDOWS套接口实现检测到网络子系统失效。 
WSAEFAULT:fromlen参数非法;from缓冲区大小无法装入端地址。 
WSAEINTR:阻塞进程被WSACancelBlockingCall()取消。 
WSAEINPROGRESS:一个阻塞的WINDOWS套接口调用正在运行中。 
WSAEINVAL:套接口未用bind()进行捆绑。 
WSAENOTCONN:套接口未连接(仅适用于SOCK_STREAM类型)。 
WSAENOTSOCK:描述字不是一个套接口。 
WSAEOPNOTSUPP:指定了MSG_OOB,但套接口不是SOCK_STREAM类型的。 
WSAESHUTDOWN:套接口已被关闭。当一个套接口以0或2的how参数调用shutdown()关闭后,无法再用recv()接收数据。 
WSAEWOULDBLOCK:套接口标识为非阻塞模式,但接收操作会产生阻塞。 
WSAEMSGSIZE:数据报太大无法全部装入缓冲区,故被剪切。 
WSAECONNABORTED:由于超时或其他原因,虚电路失效。 
WSAECONNRESET:远端强制中止了虚电路。 
 

UDP中的sendto 与recvfrom的更多相关文章

  1. (十四)UDP协议的两个主要方法sendto和recvfrom详解

    在网络编程中,UDP运用非常广泛.很多网络协议是基于UDP来实现的,如SNMP等.大家常常用到的局域网文件传输软件飞鸽传书也是基于UDP实现的. 本篇文章跟大家分享linux下UDP的使用和实现,主要 ...

  2. Linux进程间通信(九):数据报套接字 socket()、bind()、sendto()、recvfrom()、close()

    前一篇文章,Linux进程间通信——使用流套接字介绍了一些有关socket(套接字)的一些基本内容,并讲解了流套接字的使用,这篇文章将会给大家讲讲,数据报套接字的使用. 一.简单回顾——什么是数据报套 ...

  3. UNIX网络编程-send、recv、sendto、recvfrom详解

    send.recv和sendto.recvfrom,一般情况下,send.recv在TCP协议下使用,sendto.recvfrom在UDP协议下使用,也可以在TCP协议下使用,不过用的很少. 1.s ...

  4. send,recv,sendto,recvfrom

    send函数 int send( SOCKET s,    const char FAR *buf,    int len,    int flags ); 不论是客户还是server应用程序都用se ...

  5. UDP中使用bind和connect的作用

    1:UDP中可以使用connect系统调用 2:UDP中connect操作与TCP中connect操作有着本质区别. TCP中调用connect会引起三次握手,client与server建立连结.UD ...

  6. send,recv,sendto,recvfrom ~转载

     send,recv,sendto,recvfrom send函数 int send( SOCKET s,    const char FAR *buf,    int len,    int fla ...

  7. 程序编写安全代码——sendto和recvfrom的大坑

    近日帮一个兄弟查代码问题,再处理完一系列问题以后,发现程序某些时候工作还是不正常,甚至会崩溃.因为环境所限,不能使用gdb,所以我只能review他的代码.最终发现原来是sendto和recvfrom ...

  8. IP分片 与 TCP分段的区别 !!!!careful========以及udp中一个包大小究竟为多大合适 ==========三次握手四次挥手细节

    首先声明:TCP分片应该称为TCP分段 TCP/IP详解--TCP的分段和IP的分片 分组可以发生在运输层和网络层,运输层中的TCP会分段,网络层中的IP会分片.IP层的分片更多的是为运输层的UDP服 ...

  9. UDP协议 sendto 和 recvfrom 浅析与示例

    UDP(user datagram protocol)用户数据报协议,属于传输层. UDP是面向非连接的协议,它不与对方建立连接,而是直接把数据报发给对方.UDP无需建立类如三次握手的连接,使得通信效 ...

随机推荐

  1. UOJ370 滑稽树上滑稽果 【状压DP】

    题目分析: 答案肯定是链,否则可以把枝干放到主干. 去除一直存在的位,这样0位占满时就会结束. 用$f[S]$表示0位填埋情况,每次转移是它的一个子集,我们考虑可否转移. 再用$g[S]$存储转移是否 ...

  2. 图片文字识别aip的一个小Demo

    目前接触到了一个新的内容,识别图片上的文字,以下是这个Demo 首先需要在需要在百度云-管理中心创建应用 地址:http://console.bce.baidu.com/ai/#/ai/ocr/app ...

  3. 解决 phpstorm 运行卡,自动关闭等问题

    解决 phpstorm 自动关闭问题: 使用文件搜索工具(可在本博客搜索“管理工具”,或查找安装目录) 找到phpstorm.vmoptions文件,使用记事本打开. 添加以下两行代码: -Dawt. ...

  4. HDU 6336 Matrix from Arrays (杭电多校4E)

    遇事不决先打表. 然后会发现(个屁)大的矩形是由一个2L*2L的矩形重复出现组成的然后我们就可以这个矩形分成四个点到(0, 0)点的矩形,这样问题就变成了求四个到顶点(0, 0)的矩形的面积,然后就先 ...

  5. Distinct Values(2018hdu多校第一场)

    给你一段长度为n的区间,然后在给你m个小区间,要求这m个小区间里的每个人都不能重复,请你输出字典序最小的方案. 我们可以开一个suf数组,表示我到我后面的不出现重复数字的区间至少需要到达的位置.所以对 ...

  6. JAVA中循环删除list中元素

    文章来源: https://www.cnblogs.com/pcheng/p/5336903.html JAVA中循环遍历list有三种方式for循环.增强for循环(也就是常说的foreach循环) ...

  7. js jquery select 操作 获取值,选中选项,增加,修改,删除

    select示例: <select id="sel"> <option value="1">one</option> < ...

  8. ArcGIS for qml -关于空间参考如何选择设置

    作者: 狐狸家的鱼 Github: 八至 版权声明:如需转载请获取授权和联系作者 1.关于空间参考 空间参考可以通过众所周知的ID(WKID) - 整数值来引用. 官网指南中也有对此的专门说明 htt ...

  9. 第一节,初识OpenCV3-图像的读、写、显、格式转化等

    之前一直在看深度学习,突然用到了对图像处理的东西,所以过来补充一下OpenCV基础. 就顺便从网上了买了一本OpenCV 3计算机视觉这本书,这本书比较薄,但是目前已经够我用了,在这里就记录一下我的学 ...

  10. errorC2504未定义基类

    这一般是在有继承时,头文件引用错误 例如: A.cpp文件                                                        A .h文件 #include ...