精华内容
下载资源
问答
  • Socket通信类型

    2019-12-04 09:37:03
    AF_INET(Address Family Internet[家庭互联网地址])=PF_INET(Protocol Familly Internet[协议家庭互联网]) Tcp连接,跨机器 ...AF_UNIX socket文件本地连接,相比于AF_INET吃cpu和网卡IO,局限于硬盘IO
    • AF_INET(Address Family Internet[家庭互联网地址])=PF_INET(Protocol Familly Internet[协议家庭互联网]) Tcp连接,跨机器
    • AF_UNIX socket文件本地连接,相比于AF_INET不吃cpu和网卡IO,局限于硬盘IO
    展开全文
  • 经过这段时间对网络编程的学习,发现套接字的类型其实蛮多的,不是仅有TCP和UDP那么简单,本文简单理一理socket类型


    经过这段时间对网络编程的学习,发现套接字的类型其实蛮多的,不是仅有 TCPUDP那么简单,本文简单理一理socket的类型。

    socket系统调用

    通过创建socket的系统调用接口就能看到内核对socket的分类。

    // #include <sys/socket.h>
    int socket(int domain, int type, int protocol);
    

    参数

    通过domaintypeprotocol这三个参数可以唯一标识一种socket。因此可以对socket做三个维度的分类。

    domain

    该参数指定协议族。取值总共有以下几种:

    PF_LOCAL        Host-internal protocols, formerly called PF_UNIX,
    PF_UNIX         Host-internal protocols, deprecated, use PF_LOCAL,
    PF_INET         Internet version 4 protocols,
    PF_ROUTE        Internal Routing protocol,
    PF_KEY          Internal key-management function,
    PF_INET6        Internet version 6 protocols,
    PF_SYSTEM       System domain,
    PF_NDRV         Raw access to network device,
    PF_VSOCK        VM Sockets protocols
    

    常用的有三种:

    1. PF_INET:ipv4类型的socket,使用ipv4网络地址+端口号标识socket的地址,用于主机间通信。
    2. PF_INET6:ipv6类型的socket,使用ipv6网络地址+端口号标识socket的地址,用于主机间通信。
    3. PF_LOCAL:本地socket,使用某个文件的绝对路径名标识socket地址,用于同一主机的不同进程间,是一种IPC手段(相当于两个进程通过共享一个文件实现通信)。该socket使用的是简化版的网络协议栈,所以性能较高。

    协议族确定了,地址族也就确定了。
    构造socket的地址时,要指定地址族AF_xxx),AF_xxxPF_xxx是对应的。
    PF_xxx这样的值来创建socket,用AF_xxx这样的值来构造socket的地址。

    type

    该参数指定通信的语义。取值共有以下三种:

    SOCK_STREAM
    SOCK_DGRAM
    SOCK_RAW
    
    1. SOCK_STREAM:字节流类型,提供有序、可靠、有连接、基于字节流的通信机制。
    2. SOCK_DGRAM:数据报类型,提供最大长度固定、无连接、不可靠的通信机制。
    3. SOCK_RAW:原始socket类型,提供对内部网络协议和接口的访问,仅对超级用户可用。原始套接字可以不经过网络协议栈的处理,直接访问网卡,把用户进程构造的消息发出去。

    protocol

    该参数指定socket通信时要使用的特定协议。
    当前面的两个参数不能唯一标识一个具体的网络通信协议时,就会使用protocol指定具体的协议。

    返回值

    该函数会返回一个socket描述符,失败时返回-1.
    在Linux里面,万物皆文件,socket也不例外。

    socket系统调用 <----> open系统调用
    socket描述符 <----> 文件描述符
    通过socket发送数据 <----> 文件写
    通过socket接收数据 <----> 文件读

    总结

    1. domain指定了协议族。也指定了地址族,即socket的地址类型。
    2. type指定了通信语义。
    3. protocol指定了具体的通信协议。
    展开全文
  • socket

    2010-07-29 14:36:39
    目录[隐藏] 一 socket协议 Socket协议的形象描述 电话系统 Socket 接口 socket原理 socket相关知识 ...常用的Socket类型 二 socket函数 简介 错误码 一 socket...

    目录[隐藏]

    一 socket协议
    1. Socket协议的形象描述
    2. 电话系统
    3. Socket 接口
    4. socket原理
    socket相关知识
    1. 1.什么是socket
    2. 重要的Socket API
    3. 2.如何开发一个Server-Client模型的程序
    4. 常用的Socket类型
    二 socket函数
    1. 简介
    2. 错误码
    一 socket协议
    1. Socket协议的形象描述
    2. 电话系统
    3. Socket 接口
    4. socket原理
    socket相关知识
    1. 1.什么是socket
    2. 重要的Socket API
    3. 2.如何开发一个Server-Client模型的程序
    4. 常用的Socket类型
    二 socket函数
    1. 简介
    2. 错误码

     

    <script type="text/javascript"></script>

      

    一 socket协议

    Socket协议的形象描述

      socket的英文原义是“孔”或“ 插座 ”。在这里作为4BDS UNIX 的进程通信机制,取后一种意思。socket非常类似于电话插座。以一个国家级电话网为例。电话的通话双方相当于相互通信的2个进程,区号是它的网络地址;区内一个单位的 交换机 相当于一台主机,主机分配给每个用户的局内号码相当于socket号。任何用户在通话之前,首先要占有一部电话机,相当于申请一个socket;同时要知道对方的号码,相当于对方有一个固定的socket。然后向对方拨号呼叫,相当于发出连接请求(假如对方不在同一区内,还要拨对方区号,相当于给出网络地址)。对方假如在场并空闲(相当于通信的另一主机开机且可以接受连接请求),拿起电话话筒,双方就可以正式通话,相当于连接成功。双方通话的过程,是一方向电话机发出信号和对方从电话机接收信号的过程,相当于向socket发送数据和从socket接收数据。通话结束后,一方挂起电话机相当于关闭socket,撤消连接。

    电话系统

      在电话系统中,一般用户只能感受到本地电话机和对方电话号码的存在,建立通话的过程,话音传输的过程以及整个电话系统的技术细节对他都是透明的,这也与socket机制非常相似。socket利用网间网通信设施实现进程通信,但它对通信设施的细节毫不关心,只要通信设施能提供足够的通信能力,它就满足了。   至此,我们对socket进行了直观的描述。抽象出来,socket实质上提供了进程通信的端点。进程通信之前,双方首先必须各自创建一个端点,否则是没有办法建立联系并相互通信的。正如打电话之前,双方必须各自拥有一台电话机一样。在网间网内部,每一个socket用一个半相关描述:   (协议,本地地址,本地端口)   一个完整的socket有一个本地唯一的socket号,由操作系统分配。   最重要的是,socket 是面向客户/服务器模型而设计的,针对客户和服务器程序提供不同的socket 系统调用 。客户随机申请一个socket (相当于一个想打电话的人可以在任何一台入网电话上拨号呼叫),系统为之分配一个socket号;服务器拥有全局公认的 socket ,任何客户都可以向它发出连接请求和信息请求(相当于一个被呼叫的电话拥有一个呼叫方知道的电话号码)。   socket利用客户/服务器模式巧妙地解决了进程之间建立通信连接的问题。服务器socket 半相关为全局所公认非常重要。读者不妨考虑一下,两个完全随机的用户进程之间如何建立通信?假如通信双方没有任何一方的socket 固定,就好比打电话的双方彼此不知道对方的电话号码,要通话是不可能的。   -----

    Socket 接口

      Socket 接口是访问 Internet 使用得最广泛的方法。 如果你有一台刚配好TCP/IP协议的主机,其IP地址是202.120.127.201, 此时在另一台主机或同一台主机上执行ftp 202.120.127.201,显然无法建立连接。因"202.120.127.201" 这台主机没有运行FTP服务软件。同样, 在另一台或同一台主机上运行浏览软件 如Netscape,输入"http://202.120.127.201",也无法建立连接。现在,如果在这台主机上运行一个FTP服务软件(该软件将打开一个Socket, 并将其绑定到21端口),再在这台主机上运行一个Web 服务软件(该软件将打开另一个Socket,并将其绑定到80端口)。这样,在另一台主机或同一台主机上执行ftp 202.120.127.201,FTP客户软件将通过21端口来呼叫主机上由FTP 服务软件提供的Socket,与其建立连接并对话。而在netscape中输入"http://202.120.127.201"时,将通过80端口来呼叫主机上由Web服务软件提供的Socket,与其建 立连接并对话。

    socket原理

      在Internet上有很多这样的主机,这些主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。Socket正如其英文原意那样,象一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电, 有的提供110伏交流电,有的则提供有线电视节目。 客户软件将插头插到不同编号的插座,就可以得到不同的服务。   -----

    socket相关知识

    1.什么是socket

      所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。 以J2SDK-1.3为例,Socket和ServerSocket类库位于java.net包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。

    重要的Socket API

      重要的Socket API:java.net.Socket继承于java.lang.Object,有八个构造器,其方法并不多,下面介绍使用最频繁的三个方法,其它方法大家可以见JDK-1.3文档。   Accept方法用于产生"阻塞",直到接受到一个连接,并且返回一个客户端的Socket对象实例。"阻塞"是一个术语,它使程序运行暂时"停留"在这个地方,直到一个会话产生,然后程序继续;通常"阻塞"是由循环产生的。   getInputStream方法获得网络连接输入,同时返回一个InputStream对象实例。   getOutputStream方法连接的另一端将得到输入,同时返回一个OutputStream对象实例。 注意:其中getInputStream和getOutputStream方法均可能会产生一个IOException,它必须被捕获,因为它们返回的流对象,通常都会被另一个流对象使用。

    2.如何开发一个Server-Client模型的程序

      开发原理:   服务器,使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。   客户端,使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。客户端不需要指定打开的端口,通常临时的、动态的分配一个1024以上的端口。   Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。要学Internet上的TCP/IP网络编程,必须理解Socket接口。 Socket接口设计者最先是将接口放在Unix操作系统里面的。如果了解Unix系统的输入和输出的话,就很容易了解Socket了。网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。

    常用的Socket类型

      有两种:流式Socket(SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。流式是一种面向连接的Socket,针对于面向连接的TCP服务应用;数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用。 Socket建立为了建立Socket,程序可以调用Socket函数,该函数返回一个类似于文件描述符的句柄。socket函数原型为:int socket(int domain, int type, int protocol);domain指明所使用的协议族,通常为AF_INET,表示互联网协议族(TCP/IP协议族);type参数指定socket的类型:SOCK_STREAM 或SOCK_DGRAM,Socket接口还定义了原始Socket(SOCK_RAW),允许程序使用低层协议;protocol通常赋值"0"。Socket()调用返回一个整型socket描述符,你可以在后面的调用使用它。 Socket描述符是一个指向内部数据结构的指针,它指向描述符表入口。调用Socket函数时,socket执行体将建立一个Socket,实际上"建立一个Socket"意味着为一个Socket数据结构分配存储空间。 Socket执行体为你管理描述符表。两个网络程序之间的一个网络连接包括五种信息:通信协议、本地协议地址、本地主机端口、远端主机地址和远端协议端口。Socket数据结构中包含这五种信息。 socket在测量软件中的使用也很广泛

    二 socket函数

    简介

      SOCKET socket( int af, int type, int protocol );   应用程序调用socket函数来创建一个能够进行网络通信的套接字。   第一个参数指定应用程序使用的通信协议的协议族,对于TCP/IP协议族,该参数置AF_INET;   第二个参数指定要创建的套接字类型,流套接字类型为SOCK_STREAM、数据报套接字类型为SOCK_DGRAM;   第三个参数指定应用程序所使用的通信协议。   该函数如果调用成功就返回新创建的套接字的描述符,如果失败就返回INVALID_SOCKET。套接字描述符是一个整数类型的值。每个进程的进程空间里都有一个套接字描述符表,该表中存放着套接字描述符和套接字数据结构的对应关系。该表中有一个字段存放新创建的套接字的描述符,另一个字段存放套接字数据结构的地址,因此根据套接字描述符就可以找到其对应的套接字数据结构。每个进程在自己的进程空间里都有一个套接字描述符表但是套接字数据结构都是在操作系统的内核缓冲里。   下面是一个创建流套接字的例子: struct protoent *ppe; ppe=getprotobyname("tcp"); SOCKET ListenSocket=socket(PF_INET,SOCK_STREAM,ppe->p_proto);

    错误码

      WSANOTINITIALISED A successful WSAStartup call must occur before using this function.   WSAENETDOWN The network subsystem or the associated service provider has failed.   WSAEAFNOSUPPORT The specified address family is not supported.   WSAEINPROGRESS A blocking Windows Sockets 1.1 call is in progress, or the service provider is still processing a callback function.   WSAEMFILE No more socket descriptors are available.   WSAENOBUFS No buffer space is available. The socket cannot be created.   WSAEPROTONOSUPPORT The specified protocol is not supported.   WSAEPROTOTYPE The specified protocol is the wrong type for this socket.   WSAESOCKTNOSUPPORT The specified socket type is not supported in this address family.   Remarks   The socket function causes a socket descriptor and any related resources to be allocated and bound to a specific transport-service provider. Windows Sockets will utilize the first available service provider that supports the requested combination of address family, socket type and protocol parameters. The socket that is created will have the overlapped attribute as a default. For Microsoft operating systems, the Microsoft-specific socket option, SO_OPENTYPE, defined in Mswsock.h can affect this default. See Microsoft-specific documentation for a detailed description of SO_OPENTYPE.   Sockets without the overlapped attribute can be created by using WSASocket. All functions that allow overlapped operation (WSASend, WSARecv,WSASendTo, WSARecvFrom, and WSAIoctl) also support nonoverlapped usage on an overlapped socket if the values for parameters related to overlapped operation are NULL.   When selecting a protocol and its supporting service provider this procedure will only choose a base protocol or a protocol chain, not a protocol layer by itself. Unchained protocol layers are not considered to have partial matches on type or af either. That is, they do not lead to an error code of WSAEAFNOSUPPORT or WSAEPROTONOSUPPORT if no suitable protocol is found.   Important The manifest constant AF_UNSPEC continues to be defined in the header file but its use is strongly discouraged, as this can cause ambiguity in interpreting the value of the protocol parameter.   Connection-oriented sockets such as SOCK_STREAM provide full-duplex connections, and must be in a connected state before any data can be sent or received on it. A connection to another socket is created with a connect call. Once connected, data can be transferred using send and recv calls. When a session has been completed, a closesocket must be performed.   The communications protocols used to implement a reliable, connection-oriented socket ensure that data is not lost or duplicated. If data for which the peer protocol has buffer space cannot be successfully transmitted within a reasonable length of time, the connection is considered broken and subsequent calls will fail with the error code set to WSAETIMEDOUT.   Connectionless, message-oriented sockets allow sending and receiving of datagrams to and from arbitrary peers using sendto and recvfrom. If such a socket is connected to a specific peer, datagrams can be sent to that peer using send and can be received only from this peer using recv.   Support for sockets with type SOCK_RAW is not required, but service providers are encouraged to support raw sockets as practicable.   Notes for IrDA Sockets   The Af_irda.h header file must be explicitly included.   Only SOCK_STREAM is supported; the SOCK_DGRAM type is not supported by IrDA.   The protocol parameter is always set to 0 for IrDA.   Note On Windows NT, raw socket support requires administrative privileges.   Requirements   Windows NT/2000/XP: Included in Windows NT 3.1 and later.   Windows 95/98/Me: Included in Windows 95 and later.   Header: Declared in Winsock2.h.   Library: Use Ws2_32.lib.   See Also   Windows Sockets Programming Considerations Overview, Socket Functions, accept, bind, connect, getsockname, getsockopt, ioctlsocket, listen, recv, recvfrom, select, send, sendto, setsockopt, shutdown, WSASocket
    展开全文
  • 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直接访问链路层。非连接,不可靠通信服务。

    展开全文
  • Socket

    2011-05-18 11:17:00
      什么是socket <br />  所谓socket通常也称作"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求。 以J2SDK-1.3为例,Socket和ServerSocket类库位于java .net包中。...
  • Socket的学习(一)什么是Socket?

    万次阅读 多人点赞 2018-06-27 21:53:01
    本文参考的是《Socket通信原理》https://www.cnblogs.com/wangcq/p/3520400.html TCP/IP UDP是什么? TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,是一个工业标准的协议...
  • socket是什么

    千次阅读 2015-09-26 15:29:36
    Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发 TCP/IP网络上的应用程序。 请参阅以下资料: socket非常类似于电话插座。以一个国家级电话网为例。电话的通话双方相当于...
  • 这个世界上有很多种套接字(socket),比如 DARPA Internet 地址(Internet 套接字)、本地节点的路径名(Unix套接字)、CCITT X.25地址(X.25 套接字)等。但本教程只讲第一种套接字——Internet 套接字,它是最具...
  • SOCKET

    2014-01-26 22:35:48
    1 前言在一些常用的编程技术中,Socket网络编程可以说是最简单的一种。而且Socket编程需要的基础知识很少,适合初学者学习网络编程。目前支持网络传输的技术、语言和工具繁多,但是大部分都是基于Socket开发的,...
  • 什么是socket

    2015-04-23 17:00:46
    1.什么是socket  所谓socket通常也称作 "套接字 ",用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过 "套接字 "向网络发出请求或者应答网络请求。  以J2SDK-1.3为例,Socket和ServerSocket类库...
  • 其中php-fpm.sock是一个文件,由php-fpm生成,类型是srw-rw----. UNIX Domain Socket可用于两个没有亲缘关系的进程,是目前广泛使 四. 知识延伸: 上边问题说到了是因为nginx与php-fpm进程通信匹配...
  • 什么是socket

    2007-10-18 14:06:00
    socket 1.什么是socket 所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。 以J2SDK-1.3为例,Socket和ServerSocket类库位于java...
  • 这个世界上有很多种套接字(socket),比如 DARPA Internet 地址(Internet 套接字)、本地节点的路径名(Unix套接字)、CCITT X.25地址(X.25 套接字)等。但本教程只讲第一种套接字——Internet 套接字,它是最具...
  • Socket编程是什么

    2013-03-10 17:10:22
    Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发 TCP/IP网络上的应用程序。 请参阅以下资料: socket非常类似于电话插座。以一个国家级电话网为例。电话的通话双方相当于...
  • iOS 网络编程 - Socket
  • python socket编程

    2019-09-07 17:44:40
    socket协议不是属于计算机网络协议。使得应用层可以直接和传输层进行沟通。独立于这个模型之外,可以脱离于应用层,可以与传输层及以下的层建立沟通。 socket的client 和server 实现通信 上图中左侧是server端,...
  • socket编程到底是什么

    千次阅读 2013-10-11 14:22:38
    TCP/IP协议主要用于局域网及以太网的数据通讯,Socket类遵循这组协议,封装了大量的通讯内部方法,用于创建主机端与客户端的数据通讯,使得程序员工作量大大降低。 Socket接口是TCP/IP网络的API,Socket接口...
  • Python Socket介绍

    2019-12-12 20:36:23
    Socket不属于TCP/IP协议簇,它只是一个编程接口,即对TCP/IP的封装和应用,简单理解TCP/IP看看作一个函数,而Socket用来进行调用,Socket可在网络中对两个程序建立通信通道,Socket可分为两个基本模块,一个服务端...
  • socket模型

    2016-04-25 10:29:00
    仅仅是一个通信模型,不属于七层协议(网络协议). 一台电脑(IP)的一个应用程序(端口) 和 另一台电脑(IP)的应用程序(端口) 之间的通信就是通过两个socket进行连接 最常见的socket模型一个 Socket 至少包含2层协议:...
  • socket实现

    2012-08-21 19:19:47
    Socket 实现 1. 什么是TCP/IP、UDP? 2. Socket在哪里呢? 3. Socket是什么呢? 4. 你会使用它们吗? 什么是TCP/IP、UDP?  TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制...
  • socket简介

    2009-12-11 16:35:00
    socket描述 一个完整的socket有一个本地唯一的socket号,由操作系统分配。 最重要的是,socket 是面向客户/服务器模型而设计的,针对客户和服务器程序提供不同的socket 系统调用。客户随机申请一个socket (相当...
  • Android socket

    千次阅读 2012-05-15 09:35:36
    所谓socket通常也称作"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求。 以J2SDK-1.3为例,Socket和ServerSocket类库位于java .net包中。ServerSocket用于服务器端,Socket是建立网络连接时...
  • socket简述

    2012-08-31 16:33:31
    socket的英文原义是“孔”或“插座”。作为4BDS UNIX的进程通信机制,取后一种意思。通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。在Internet上的主机一般运行了多个服务软件,同时提供几种服务...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 47,269
精华内容 18,907
关键字:

以下不属于socket类型的是