zoukankan      html  css  js  c++  java
  • socket

    socket是应用层与TCP/IP协议通信的中间软件抽象层,一组接口.将复杂的tcp/ip协议组隐藏在socket接口后面,无需理解tcp/udp协议,只需遵循socket的规定去编程.

    套接字有两种,分别是基于文件型和基于网络型的AF_UNIX,AF_INET

    服务器端首先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接.

    客户端初始化Socket,连接服务器,连接成功客户端与服务器连接建立

    服务器套接字函数

    s.bind() 绑定(主机,端口号)到套接字

    s.listen() 开始tcp监听

    s.accept() 被动接受tcp客户的连接(阻塞式)等待连接的到来

    客户端套接字函数

    s.connect()  主动初始化tcp服务器连接

    s.connect_ex() connect()函数的扩展版本,出错时返回出错码,而不是抛出异常

    公共用途的套接字函数

    s.recv()  接收tcp数据

    s.send()  发送tcp数据(send在发送数据量大于己端缓存区剩余空间时,数据丢失,不会发完)

    s.sendall() 发送完整的tcp数据(本质是循环调用send,sendall在待发送数据量大于己端缓存区剩余空间时,数据不丢失,循环调用send直到发完)

    s.recvfrom()  接收udp数据

    s.sendto()  发送udp数据

    s.getpeername() 连接到当前套接字的远端的地址

    s.getsockname() 当前套接字的地址

    s.getsockopt() 返回指定套接字的参数

    s.setsockopt() 设置指定套接字的参数

    s.close() 关闭套接字

    面向锁的套接字方法

    s.setblocking()  设置套接字的阻塞与非阻塞模式

    s.settimeout()  设置阻塞套接字操作的超时时间

    s.gettimeout() 得到阻塞套接字操作的超时时间

    面向文件的套接字的函数

    s.fileno()  套接字的文件描述符

    s.makefile()  创建一个与该套接字相关的文件

    基于tcp的套接字

    tcp是基于链接的,必须先启动服务端,然后在启动客户端去链接服务端

     1 tcp服务端
     2 
     3 复制代码
     4 1 ss = socket() #创建服务器套接字
     5 2 ss.bind()      #把地址绑定到套接字
     6 3 ss.listen()      #监听链接
     7 4 inf_loop:      #服务器无限循环
     8 5     cs = ss.accept() #接受客户端链接
     9 6     comm_loop:         #通讯循环
    10 7         cs.recv()/cs.send() #对话(接收与发送)
    11 8     cs.close()    #关闭客户端套接字
    12 9 ss.close()        #关闭服务器套接字(可选)
    13 复制代码
    14 tcp客户端
    15 
    16 1 cs = socket()    # 创建客户套接字
    17 2 cs.connect()    # 尝试连接服务器
    18 3 comm_loop:        # 通讯循环
    19 4     cs.send()/cs.recv()    # 对话(发送/接收)
    20 5 cs.close()            # 关闭客户套接字
    tcp

    基于udp的套接字

    udp是无链接的,先启动哪一端都不会报错

     1 udp服务端
     2 
     3 1 ss = socket()   #创建一个服务器的套接字
     4 2 ss.bind()       #绑定服务器套接字
     5 3 inf_loop:       #服务器无限循环
     6 4     cs = ss.recvfrom()/ss.sendto() # 对话(接收与发送)
     7 5 ss.close()                         # 关闭服务器套接字
     8 udp客户端
     9 
    10 cs = socket()   # 创建客户套接字
    11 comm_loop:      # 通讯循环
    12     cs.sendto()/cs.recvfrom()   # 对话(发送/接收)
    13 cs.close()                      # 关闭客户套接字
    udp
  • 相关阅读:
    JVM如何执行方法调用
    JVM如何实现反射
    JVM是如何处理异常的
    Java类加载
    windows-Kafka安装
    Google Eventbus简单使用
    队列c#版
    python 元类

    Spring Mvc 笔记二之异常和文件上传
  • 原文地址:https://www.cnblogs.com/suncunxu/p/10174365.html
Copyright © 2011-2022 走看看