zoukankan      html  css  js  c++  java
  • 套接字socket

    基本概念

    套接字(Socket)是一种介于应用层与传输层之间的抽象层,使用Socket可以将应用程序添加到网络中,并可以与处于同一个网络中的其他应用程序进行数据通信。

    sockect一定要有IP地址跟端口号:

    IP地址:在网络环境中唯一标识一台主机

    端口号:在主机中唯一标识一个进程

    IP地址+端口号:在网络环境中唯一标识一个进程()

    套接字一定是成对出现:

    一个socket含有两个缓冲区,一个用于读入,一个用于写出,实现全双工。

    Socket类型

    我们现在主要使用的是TCP/IP协议族,而TCP/IP协议族中的主要Socket类型为流套接字数据报套接字
    流套接字
    使用协议:使用TCP作为端对端的通信协议
    特点:
    1)面向连接;
    2)每一条TCP连接只能是点对点的(一对一);
    3)提供可靠交付的服务;
    4)提供全双工通信;
    5)面向字节流。
    流套接字,就好像打电话,必须两端同时接通才能通话。
    数据报套接字
    使用协议:使用UDP作为端对端的通信协议
    特点:
    1)无连接;
    2)尽最大努力交付;
    3)面向报文;
    4)无拥塞控制;
    5)支持一对一、一对多、多对一和多对多的交互通信;
    6)首部开销小(只有四个字段:源端口、目的端口、长度、检验和)。
    数据报套接字,就好像寄信,我往外寄出去了,但是对方收没收到我不知道。

    Socket工作流程

    tcp

     

    udp

     

    socket函数

    头文件:

    #include <sys/socket.h>
    函数原型

    int socket(int domain, int type, int protocol);
    作用:

    创建套接字。

    参数介绍:

    参数domain:指定使用何种的地址类型。默认AF_INET。
    eg:
    AF_INET IPv4网络通信
    AF_INET6 IPv6网络通信
    AF_PACKET 链路层通信
    AF_UNIX, AF_LOCAL 本地通信

    参数type:套接字类型。默认SOCK_STREAM。
    eg:
    1、SOCK_STREAM 提供双向连续且可信赖的数据流, 即TCP. 支持 OOB 机制, 在所有数据传送前必须使用connect()来建立连线状态
    2、SOCK_DGRAM 使用不连续不可信赖的数据包连接,基于UDP
    3、SOCK_SEQPACKET 提供连续可信赖的数据包连接
    4、SOCK_RAW 提供原始网络协议存取
    5、SOCK_RDM 提供可信赖的数据包连接
    6、SOCK_PACKET 提供和网络驱动程序直接通信. protocol 用来指定 socket 所使用的传输协议编号, 通常此参考不用管它, 设为0 即 可

    参数protocol:协议号。可设置为0,表示选择当前family和type组合下 protocol的系统默认值
    eg:
    IPPROTO_TCP IPPTOTO_UDP IPPROTO_SCTP IPPROTO_TIPCTCP
    TCP传输协议 UDP传输协议 STCP传输协议 TIPC传输协议

  • 相关阅读:
    [POI2014]KUR-Couriers
    MySQL有哪些索引
    索引的设计原则
    explain参数之extra
    explain参数之type
    explain参数之select_type
    如何查询最后一行的记录
    为什么MySQL自增id不连续?
    MySQL字符集
    MySQL有哪些优化策略?
  • 原文地址:https://www.cnblogs.com/yxbl/p/12627794.html
Copyright © 2011-2022 走看看