read和write

#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
ssize_t write(int fd, const void *buf, size_t count);

參数:

fd: 文件描写叙述符
buf:数据缓冲区。用于保存要从fd读取或写入的数据
count:输入/写入的数据最大字节数。

(实际读取或写入的数据大小可能小于count)


返回值:
正常情况下返回读取或写入的真正的数据大小
返回0表示没有数据被读取到或写入
-1:函数调用错误。errno值会被设置

readv和writev

#include <sys/uio.h>
ssize_t readv(int fd, const struct iovec *iov, int iovcnt);
ssize_t writev(int fd, const struct iovec *iov, int iovcnt);
依据iov预先制定的格式读取或写入数据。
相当于写数据块,而且能够制定数据块的大小。

详细參考结构体struct iovec

send和recv

send和recv用于已经建立连接的套接字通信(UDP也有已连接的)
#include <sys/types.h>
#include <sys/socket.h>
ssize_t send(int sockfd, const void *buf, size_t len, int flags);
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
前面三个參数类似于read和write。


flags 參数有例如以下的选择:
MSG_DONTROUTE 勿将数据路由出本地网络
MSG_DONTWAIT 同意非堵塞操作(等价于使用O_NONBLOCK)
MSG_EOR 假设协议支持,此为记录结束
MSG_OOB 假设协议支持,发送带外数据
MSG_NOSIGNAL 禁止向系统发送异常信息
返回值
成功则返回实际传送出去的字符数,失败返回-1,错误原因存于errno 中。

recvfrom和sendto

原型
#include <sys/types.h>
#include <sys/socket.h>
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen);
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen);
參数:
    前面三个參数与read/write的三个參数类似,分别表示文件描写叙述符。数据缓冲区,最大读取/写入的数据大小
    flags: 与send和recv一样
    src_addr:数据报发送者的协议地址的套接字地址结构
    dest_addr:数据报要发送的目的地协议地址的套接字地址结构
    addrlen,前一个參数的大小
返回值:
    真正发送/接收的数据的大小

注意点:
    我们能够看到,sendto和recvfrom函数均含有一个跟对端地址相关的參数(src_addr, dest_addr),因此能够再没有建立连接的网络通信(UDP)中使用。这里sockfd仅仅须要通过socket()进行创建,而不一定须要connect()进行连接。(不须要不代表不能,后面进一步介绍)
    在一些时候。我们须要使用connect()为UDP通信建立连接,(由于UDP是不可靠的,但我们却想要将异步错误返回)。这里的连接于TCP的连接时不一样的。UDP的connect相当于TCP的connect的重载,它没有三次握手的过程。更倾向于绑定的概念。UDPconnect()仅仅是将套接字与IP地址进行连接绑定。
    使用有连接的UDP通信时,我们一般不适用sendto和recvfrom。而使用send和recv等函数。如非要使用sendto和recvfrom,则src_addr,dest_addr,參数必须为NULL。len必须为0



recvmsg和sendmsg

#include <sys/types.h>
#include <sys/socket.h>
ssize_t recvmsg(int sockfd, struct msghdr *msg, int flags);
ssize_t sendmsg(int sockfd, const struct msghdr *msg, int flags);
类似于readv和writev。參考msghdr结构体


笔记:

    假设套接口为SOCK_STREAM类型,而且远端“优雅”地中止了连接(发送端send后马上关闭套接字。还没測试),那么recv()一个数据也不读取,马上返回。

假设马上被强制中止,那么recv()将以WSAECONNRESET错误失败返回。flags參数和套接字选项都会影响到网络I/O函数的调用方式。

    

版权声明:本文博客原创文章,博客,未经同意,不得转载。

网络编程I/O功能介绍的更多相关文章

  1. Java网络编程的Java流介绍

    前言 网络程序所做的很大一部分工作都是简单的输入输出:将数据字节从一个系统移动到另一个系统.Java的I/O建立于流(stream)之上.输入流读取数据,输出流写入数据.过滤器流(filter)流可以 ...

  2. python网络编程-Json序列化功能扩展-软件开发架构-OSI七层协议-TCP-01

    面向对象补充知识点(面向对象的应用) 扩展json序列化所支持的数据类型(分析源码) import json from datetime import datetime, date # ------- ...

  3. 17 网络编程 C/S架构介绍

    1.什么是C/S架构 C指的是client(客户端软件),S指的是Server(服务器软件),本章的重点是教大家写一个C/S架构的软件,实现服务端软件与客户端软件基于网络通信. 2.计算机基础的知识- ...

  4. 网络编程I/O函数介绍

    read和write #include <unistd.h> ssize_t read(int fd, void *buf, size_t count); ssize_t write(in ...

  5. <网络编程>套接字介绍

    1.端口:IANA(Internet Assigned Numbers Authority)维护着一个端口号分配状况的清单. 众所周知的端口(0-1023):由IANA分配和控制,可能的话,相同的端口 ...

  6. linux网络编程实现投票功能

    投票系统 1.说明: 写了一个投票系统.过程是先配置好server.在写一个网上投票功能,要实现网上投票功能. 事实上功能实现还是非常easy的,麻烦一点的在于过程比較繁杂,要做的东西还是挺多的! 2 ...

  7. linux网络编程之共享内存介绍

    今天是个好日子,洋人之节乃全球同庆,圣诞一来感觉就要过年了,不过今晚心情有点打折扣,给心爱的人打电话没有打通,本想在平安夜送上快乐的祝福给她,糟糕的心情让自己好像泄了气的皮球一样,无精打彩,心情灰暗, ...

  8. python select网络编程详细介绍

    刚看了反应堆模式的原理,特意复习了socket编程,本文主要介绍python的基本socket使用和select使用,主要用于了解socket通信过程 一.socket模块 socket - Low- ...

  9. 【网络编程4】网络编程基础-ARP响应(ARP欺骗之中间人攻击)

    arp欺骗->arp响应 ARP 缓存中毒(ARP欺骗) arp传送原理在于主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址:收到返回消 ...

随机推荐

  1. Oracle SQL Lesson (9) - 操作数据(增删改)

    使用INSERT语句INSERT INTO table [(column [, column...])]VALUES (value [, value...]); INSERT INTO departm ...

  2. POJ训练计划2418_Hardwood Species(Trie树)

    解题报告 Tire树. #include <iostream> #include <cstring> #include <cstdio> #include < ...

  3. 国外代理server

    这里有几个国外的代理server 另外在网上能够找到很多这种 不能用的时候就在网上搜搜 稳定代理server 有非常多的 IP port 显示地址 24.245.58.130:32167 美国 新泽西 ...

  4. sizeClass和autolayout学习资源整理

    sizeClass和autolayout,看来不得不開始放弃frame的写法,收集点资料集中学习下 Adaptivity User Interfaces苹果官方文档:https://developer ...

  5. MVC 应用免受 CSRF攻击

    保护ASP.NET 应用免受 CSRF 攻击   CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack ...

  6. windows API与C#的数据类型对应关系表

    API与C#的数据类型对应关系表 API数据类型 类型描述 C#类型 API数据类型 类型描述 C#类型 WORD 16位无符号整数 ushort CHAR 字符 char LONG 32位无符号整数 ...

  7. 计时器 Timer

    计时器 Timer 不多说了,守则.

  8. 【Android基础】短信的发送

    //Button的点击事件 @Override public void onClick(View v) { // 接受者电话号码 Uri uri = Uri.parse("smsto:123 ...

  9. [改变自己wordpress.2]给wordpress加上简单debug sql调试.

    或者说,同事. 需要帮她打印出来sql 调试输出到页面sql 在这里,我们使用插件或一个的方式来启动配置文件wordpress的debug 在插件文件夹 wordpress/wp-content/pl ...

  10. C# WinForm 拖动无边框窗体 改变无边框窗体尺寸

    经常遇到这种情况.窗体的边框去掉了.然后种种问题就出来了:不能拖动.不能改变窗体大小.不能......当然.肯定有解决方案滴*^_^*今天的目标就是:可以直接拖动没有边框的窗体.可以直接拉拽窗体改变其 ...