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. jquery的attr禁用表单元素的方法

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  2. Asp.net 视频摘要

    Asp.net一遍又一遍视频最近,例如中,大多数的实现.由于原因的版本号,.当然学过是学过.总结不可缺少. 先宏观后微观.刚学完,感觉知识特别乱,所以先画了张图: watermark/2/text/a ...

  3. HTTP求

    client联系server后,至server获取问题 Web 新闻资源,简称client至server发送一个 HTTP 求. 一个完整的 HTTP 该请求包含以下示例: ① ②若干消息头(请求头) ...

  4. silverlight 和winform的结合使用

    silverlight 和winform的结合使用比较简单,将silverlight承载在页面上,页面运行在winform上的webbrowser中即可. 这样的情况下,我没找到页面中silverli ...

  5. JAVA jdbc(数据库连接池)学习笔记(转)

    学习内容: 1.JDBC的含义... JDBC想必学过JAVA的就不会陌生,JDBC到底是什么呢?其实就是由JAVA的一些类和接口构成的API,保存在java.sql和javax.sql..包中的一些 ...

  6. Codeforces 9A-Die Roll(意甲冠军)

    A. Die Roll time limit per test 1 second memory limit per test 64 megabytes input standard input out ...

  7. 基于Velocity开发自己的模板引擎

    Velocity是一个基于java的模板引擎(template engine).它同意不论什么人只简单的使用模板语言(template language)来引用由java代码定义的对象. 当Veloc ...

  8. 乐在其中设计模式(C#) - 装饰模式(Decorator Pattern)

    原文:乐在其中设计模式(C#) - 装饰模式(Decorator Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 装饰模式(Decorator Pattern) 作者:weba ...

  9. UVA 11774 - Doom&#39;s Day(规律)

    UVA 11774 - Doom's Day 题目链接 题意:给定一个3^n*3^m的矩阵,要求每次按行优先取出,按列优先放回,问几次能回复原状 思路:没想到怎么推理,找规律答案是(n + m) / ...

  10. STL内存分配

    STL内存创建 Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu  转载请标明来源 1.      Stl内存创建基类模板__malloc_alloc_tem ...