精华内容
下载资源
问答
  • Socket类型及函数简介

    千次阅读 2018-07-26 17:25:27
         

     

     

     

     

    展开全文
  • 这个世界上有很多种套接字(socket),比如 DARPA Internet 地址(Internet 套接字)、本地节点的路径名(Unix套接字)、CCITT X.25地址(X.25 套接字)等。但本教程只讲第一种套接字——Internet 套接字,它是最具...

    这个世界上有很多种套接字(socket),比如 DARPA Internet 地址(Internet 套接字)、本地节点的路径名(Unix套接字)、CCITT X.25地址(X.25 套接字)等。但本教程只讲第一种套接字——Internet 套接字,它是最具代表性的,也是最经典最常用的。以后我们提及套接字,指的都是 Internet 套接字。

    根据数据的传输方式,可以将 Internet 套接字分成两种类型。通过 socket() 函数创建连接时,必须告诉它使用哪种数据传输方式。

    Internet 套接字其实还有很多其它数据传输方式,但是我可不想吓到你,本教程只讲常用的两种。

    流格式套接字(SOCK_STREAM)

    流格式套接字(Stream Sockets)也叫“面向连接的套接字”,在代码中使用 SOCK_STREAM 表示。

    SOCK_STREAM 是一种可靠的、双向的通信数据流,数据可以准确无误地到达另一台计算机,如果损坏或丢失,可以重新发送。

    流格式套接字有自己的纠错机制,在此我们就不讨论了。

    SOCK_STREAM 有以下几个特征:

    • 数据在传输过程中不会消失;
    • 数据是按照顺序传输的;
    • 数据的发送和接收不是同步的(有的教程也称“不存在数据边界”)。


    可以将 SOCK_STREAM 比喻成一条传送带,只要传送带本身没有问题(不会断网),就能保证数据不丢失;同时,较晚传送的数据不会先到达,较早传送的数据不会晚到达,这就保证了数据是按照顺序传递的。
     

    将面向连接的套接字比喻成传送带


    为什么流格式套接字可以达到高质量的数据传输呢?这是因为它使用了 TCP 协议(The Transmission Control Protocol,传输控制协议),TCP 协议会控制你的数据按照顺序到达并且没有错误。

    你也许见过 TCP,是因为你经常听说“TCP/IP”。TCP 用来确保数据的正确性,IP(Internet Protocol,网络协议)用来控制数据如何从源头到达目的地,也就是常说的“路由”。

    那么,“数据的发送和接收不同步”该如何理解呢?

    假设传送带传送的是水果,接收者需要凑齐 100 个后才能装袋,但是传送带可能把这 100 个水果分批传送,比如第一批传送 20 个,第二批传送 50 个,第三批传送 30 个。接收者不需要和传送带保持同步,只要根据自己的节奏来装袋即可,不用管传送带传送了几批,也不用每到一批就装袋一次,可以等到凑够了 100 个水果再装袋。

    流格式套接字的内部有一个缓冲区(也就是字符数组),通过 socket 传输的数据将保存到这个缓冲区。接收端在收到数据后并不一定立即读取,只要数据不超过缓冲区的容量,接收端有可能在缓冲区被填满以后一次性地读取,也可能分成好几次读取。

    也就是说,不管数据分几次传送过来,接收端只需要根据自己的要求读取,不用非得在数据到达时立即读取。传送端有自己的节奏,接收端也有自己的节奏,它们是不一致的。

    流格式套接字有什么实际的应用场景吗?浏览器所使用的 http 协议就基于面向连接的套接字,因为必须要确保数据准确无误,否则加载的 HTML 将无法解析。

    数据报格式套接字(SOCK_DGRAM)

    数据报格式套接字(Datagram Sockets)也叫“无连接的套接字”,在代码中使用 SOCK_DGRAM 表示。

    计算机只管传输数据,不作数据校验,如果数据在传输中损坏,或者没有到达另一台计算机,是没有办法补救的。也就是说,数据错了就错了,无法重传。

    因为数据报套接字所做的校验工作少,所以在传输效率方面比流格式套接字要高。

    可以将 SOCK_DGRAM 比喻成高速移动的摩托车快递,它有以下特征:

    • 强调快速传输而非传输顺序;
    • 传输的数据可能丢失也可能损毁;
    • 限制每次传输的数据大小;
    • 数据的发送和接收是同步的(有的教程也称“存在数据边界”)。


    众所周知,速度是快递行业的生命。用摩托车发往同一地点的两件包裹无需保证顺序,只要以最快的速度交给客户就行。这种方式存在损坏或丢失的风险,而且包裹大小有一定限制。因此,想要传递大量包裹,就得分配发送。
     

    将无连接套接字比喻成摩托车快递


    另外,用两辆摩托车分别发送两件包裹,那么接收者也需要分两次接收,所以“数据的发送和接收是同步的”;换句话说,接收次数应该和发送次数相同。

    总之,数据报套接字是一种不可靠的、不按顺序传递的、以追求速度为目的的套接字。

    数据报套接字也使用 IP 协议作路由,但是它不使用 TCP 协议,而是使用 UDP 协议(User Datagram Protocol,用户数据报协议)。

    QQ 视频聊天和语音聊天就使用 SOCK_DGRAM 来传输数据,因为首先要保证通信的效率,尽量减小延迟,而数据的正确性是次要的,即使丢失很小的一部分数据,视频和音频也可以正常解析,最多出现噪点或杂音,不会对通信质量有实质的影响。

    注意:SOCK_DGRAM 没有想象中的糟糕,不会频繁的丢失数据,数据错误只是小概率事件。
    参考文章: http://c.biancheng.net/view/2124.html
    展开全文
  • Socket常用几种类型

    万次阅读 2014-12-03 14:27:50
    Socket是一组编程接口(API), 是对TCP/IP协议的封装和应用。介于传输层和应用层,大致驻留在 ...基于传输层差异,4种类型Socket:  (1)基于TCP的Socket:提供给应用层可靠的流式数据服务,使用T
     
    

        Socket是一组编程接口(API), 是对TCP/IP协议的封装和应用。介于传输层和应用层,大致驻留在 OSI 模型的会话层,向应用层提供统一的编程接口。应用层不必了解TCP/IP协议细节。直接通过对Socket接口函数的调用完成数据在IP网络的传输。


    基于传输层差异,4种类型的Socket:
        (1)基于TCP的Socket:提供给应用层可靠的流式数据服务,使用TCP的Socket应用程序协议:BGP,HTTP,FTP,TELNET等。优点:基于数据传输的可靠性。
       (2)基于UDP的Socket:适用于数据传输可靠性要求不高的场合。基于UDP的Socket应用程序或协议有:RIP,SNMP,L2TP等。
      (3)基于RawIp的Socket:非连接,不可靠的数据传输。特点:能使应用程序直接访问网络层。基于RawIp的Socket有ping ,tracert,ospf等。
      (4)基于链路层的Socket。为IS-IS协议提供的Socket接口。使IS-IS协议可通过Socket直接访问链路层。非连接,不可靠通信服务。

    展开全文
  • 用这个系列在记录自己的C++网络编程之路。 首先,网络编程必然离不开socketAPI函数,大多数 Socket API 都源于BSD Socket(即伯克利套接字(Berkeley Sockets)),因此这些 socket 函数在... 创造某种类型的套...

    用这个系列在记录自己的C++网络编程之路。

    首先,网络编程必然离不开socketAPI函数,大多数 Socket API 都源于BSD Socket (即伯克利套接字Berkeley Sockets)),因此这些 socket 函数在不同的平台有着相似的签名和参数。

    ### 常用的socketAPI函数

    函数名称函数简单描述附加说明
    socket创造某种类型的套接字 
    bind将一个 socket 绑定一个ip与端口的二元组上 
    listen将一个 socket 变为侦听状态 
    connect试图建立一个 TCP 连接 
    accept尝试接收一个连接 
    send通过一个socket发送数据 
    recv通过一个socket收取数据 
    select判断一组socket上的读事件 
    gethostbyname通过域名获取机器地址 
    close关闭一个套接字,回收该 socket 对应的资源Windows 系统中对应的是 closesocket
    shutdown关闭 socket 收或发通道 
    setsockopt设置一个套接字选项 
    getsockopt获取一个套接字选项

     

    以上只是最常用的一部分socket 函数,在类Unix系统中,我们可以使用相关的工具查看它的用法。具体而言,我们想要查看bing函数的方法,只需要在 shell 终端输入 man bind

     

    如上面的代码片段所示,man手册对于一个函数的说明一般包括如下几部分:

    • 函数声明及相关数据结构所在的头文件,你实际编码时如果需要使用这个函数必须包含该头文件;
    • 函数的签名,即该函数的参数类型、个数和返回值;
    • 函数用法说明,并可能包括一些注意事项;
    • 函数返回值说明;
    • 调用函数出错可能得到的错误码值;
    • 一些相关函数在 man 手册的位置索引。(connect 没有这个部分)

     

     

    展开全文
  • 请问你有没有基于做过socket的开发?具体网络层的操作该怎么做?(其实也是问网络编程的基本步骤) 服务端:socket-bind-listen-accept 客户端:socket-connect 请你来说一下socket编程中服务器端和客户端主要...
  • 常见socket出错总结

    千次阅读 2018-08-11 22:43:35
    常见错误      ECONNREFUSED(111): 没有这个端口  EAGAIN(11): buff已满  EPIPE(32): 客户端断掉了  ECONNRESET(104): 客户...
  • TCP的socket编程中常见问题及注意事项
  • Socket 的功能 和 套接字的三种类型

    千次阅读 2019-03-06 17:09:08
    6.2.2 Socket的功能 Socket的英文原意就是“孔”或“插座”,现在,作为BSD UNIX的...日常生活中常见的插座,有的是信号插座,有的是电源插座,有的可以接受信号(或能量),有的可以发送信号(或能量)。假如电话线与...
  • 什么是socketsocket详解

    千次阅读 2017-06-22 08:41:37
    “一切皆Socket!” 话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket。 ——有感于实际编程和开源项目研究。...我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开...socket类型
  • Socket通讯中常见的错误码解释

    千次阅读 2018-04-26 15:25:39
    #define ESOCKTNOSUPPORT 94 /* Socket type not supported */ socket类型不支持 #define EOPNOTSUPP 95 /* Operation not supported on transport endpoint */ 操作不支持传输端点 #define EPFNOSUPPORT 96 /* ...
  • 常见socket读写异常及错误

    千次阅读 2015-08-10 16:43:55
     错误被描述为“broken pipe”,即“管道破裂”,这种情况一般发生在客户进程不理会(或未及时处理)Socket 错误,继续向服务 TCP 写入更多数据时,内核将向客户进程发送 SIGPIPE 信号,该信号默认会使进程终止...
  • Socket常见错误代码与描述

    千次阅读 2017-11-06 10:17:04
    Socket常见错误代码与描述Socket error 0 – Directly send error Socket error 10004 – Interrupted function //call 操作被终止 Socket error 10013 – Permission denied //c访问被拒绝 Socket error 10014 ...
  • socke系列文章中第二骗,讲解在linux下集中常见socket的服务端开发莫模式。socket通信根据协议划分可分为基于流的TCP通信和基于数据报的UDP通信。两个协议之间的区别大家都知道一个是面向连接一个是面向无连接的。...
  • 测试socket接口

    万次阅读 多人点赞 2017-09-20 16:29:38
    测试socket接口 接口测试时,除了常见的http接口,还有一种比较多见,就是socket接口,今天讲解下怎么用Python自带的socket库进行socket接口测试。
  • Socket 类 构造函数和常见方法

    千次阅读 2017-01-24 14:16:23
     通过系统默认类型的 SocketImpl 创建未连接套接字 Socket(InetAddress address, int port)   创建一个流套接字并将其连接到指定 IP 地址的指定端口号。 Socket(InetAddress host, int port, boolean
  • linux下的Socket基础知识学习

    千次阅读 2018-07-28 16:32:22
    2.Socket类型 (1)流式Socket(SPCKET_STREAM):用于TCP (2)数据报Socket(SOCKET_DGRAM):用于UDP (3)yuan原始Socket(SOCKET_RAW):用于新的网络协议实现的测试 3.Socket信息数据结构 sa_...
  • Socket编程中常见的数据结构及转换函数 引言:本篇笔记第一部分介绍socket套接字编程中常见的数据结构,第二部分介绍网络字节顺序、主机与网络字节顺序转换函数、IP地址转换函数。 一、Socket编程中常见的网络...
  • 类型 TextPackageInfo(SuperSocket.ProtoBase.TextPackageInfo,SuperSocket.ProtoBase) 是在 SuperSocket 中定义的最简单的数据包。它代表这类型的包仅包含一个字符串。 可以把包类型看成一种协议 那么最简单的...
  • 使用socket函数的一些常见错误

    万次阅读 2015-08-20 14:45:36
    原文地址:使用socket函数的一些常见错误1.socketSOCKET socket( int af, int type, int protocol ); af:常为AF_INET 使用AF_ISO等其他地址族标识,而非AF_INET。 返回:-1。 错误:10047(使用了与请求的协议不...
  • Socket通讯连接常见错误代码

    万次阅读 2014-10-23 16:19:05
    我们正常的建立Socket连接过程都是先运行客户端程序时,客户端不断尝试去连接服务器, 如果连接失败,sleep 几秒再去连接… 错误代码10061, 说明服务器已经找到,但连接被服务器拒绝, 连接失败原因可能是: ...
  • 前面的文章一系列文章有介绍了 linux 下常见的 IPC 机制,如管道、消息队列、信号量、共享内存。 之前有讲到共享内存是最高效的 IPC 方式,但是在 linux 环境下,应用最广泛的可能是 Socket。 什么是 Unix Domain ...
  • socket编程常见宏定义和数据结构

    千次阅读 2015-08-30 17:20:27
    socket.h 宏定义 /*  * For setsockopt(2)  *  * This defines are ABI conformant as far as Linux supports these ...  */ #define SOL_SOCKET 0xffff #define SO_DEBUG 0x0001 /* Record ...
  • 最近学习Python3,由于python版本不是向下兼容,...分为两个方面:HTTP/HTTPS协议,Socket通讯1.HTTP/HTTPS参考文章:https://blog.csdn.net/drdairen/article/details/51149498使用模块 urllib,(python2.X 需要模...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 96,036
精华内容 38,414
关键字:

常见的socket类型