zoukankan      html  css  js  c++  java
  • python笔记之socket

    python支持网络编程,提供了socket模块,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的全部方法。

    下面简单了解一下socket

    Socket又称“套接字”用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。Socket是面向客户/服务器模型而设计的,针对客户和服务器程序提供不同的Socket系统调用。客户随机申请一个Socket,系统为之分配一个Socket号;服务器拥有全局公认的Socket,任何客户都可以向它发出连接请求和信息请求。

    socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。

    根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。

    (1)服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。

    (2)客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。

    (3)连接确认:是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

    Socket类型
    套接字格式:
    socket(family,type[,protocal]) 使用给定的地址族、套接字类型、协议编号(默认为0)来创建套接字。
    常用的socket类型如下:

    Socket类型 描述
    socket.AF_INET 服务器之间网络通信
    socket.SOCK_STREAM 流式socket , 用于TCP协议
    socket.SOCK_DGRAM 数据报式socket , 用于 UDP协议

    创建TCP Socket:=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    创建UDP Socket:s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

    Socket 函数
    常用的socket函数如下:

    socket函数 描述
    服务端socket函数
    s.bind(address) 将套接字绑定到地址, 在AF_INET下,以元组(host,port)的形式表示地址.
    s.listen(backlog) 开始监听TCP传入连接。backlog指定在拒绝连接之前,操作系统可以挂起的最大连接数量。该值至少为1,大部分应用程序设为5就可以了。
    s.accept() 接受TCP连接并返回(conn,address),其中conn是新的套接字对象,可以用来接收和发送数据。address是连接客户端的地址。
    客户端socket函数
    s.connect(address) 连接到address处的套接字。一般address的格式为元组(hostname,port),如果连接出错,返回socket.error错误。
    公共socket函数
    s.recv(bufsize[,flag]) 接受TCP套接字的数据。数据以字符串形式返回,bufsize指定要接收的最大数据量。flag提供有关消息的其他信息,通常可以忽略。
    s.send(string[,flag]) 发送TCP数据。将string中的数据发送到连接的套接字。返回值是要发送的字节数量,该数量可能小于string的字节大小。
    s.sendall(string[,flag]) 完整发送TCP数据。将string中的数据发送到连接的套接字,但在返回之前会尝试发送所有数据。成功返回None,失败则抛出异常。
    s.recvfrom(bufsize[.flag]) 接受UDP套接字的数据。与recv()类似,但返回值是(data,address)。其中data是包含接收数据的字符串,address是发送数据的套接字地址。
    s.sendto(string[,flag],address) 发送UDP数据。将数据发送到套接字,address是形式为(ipaddr,port)的元组,指定远程地址。返回值是发送的字节数。
    s.close() 关闭套接字。

     使用socket进行做接口测试编程思路:

    TCP客户端: 

    1 创建套接字,连接远端地址 

     socket.socket(socket.AF_INET,socket.SOCK_STREAM)  #创建套接字实例

     s.connect((host,port))  #链接服务器 

    2 连接后发送数据和接收数据         

     s.send()  #发送请求数据

     s.recv()  #接收相应数据 

    3 传输完毕后,关闭套接字         

    s.close() 

    服务端结构:

    s= socket() #创建服务器套接字
    s.bind()      #把地址绑定到套接字
    s.listen()      #监听链接
    while True:      #服务器无限循环
        tcpc = s.accept() #接受客户端链接
        while True:         #通讯循环
            tcpc.recv()/tcpc.send() #对话(接收与发送)
        tcpc.close()    #关闭客户端套接字
    s.close()        #关闭服务器套接字(可选)


    客户端结构:

    s= socket()    # 创建客户端套接字
    s.connect()    # 尝试连接服务器
    while True:        # 通讯循环
        s.send()/s.recv()    # 对话(发送/接收)
    s.close()      # 关闭客户套接字
  • 相关阅读:
    QT 应用程序关闭某个窗口时,关闭打开的所有其他窗口并退出程序 【转】
    XP配置DCOM服务【转】
    Android最佳性能实践(二)——分析内存的使用情况
    Android最佳性能实践(一)——合理管理内存
    快速实现 ListView下拉,图片放大刷新操作
    Android布局实现圆角边框
    android 自定义文字跑马灯 支持拖拽,按住停止滚动,自定义速度
    Android NDK 环境搭建 + 测试例程
    Android -- 桌面悬浮,仿360
    android-async-http AsyncHttpClient介绍
  • 原文地址:https://www.cnblogs.com/heertong/p/12236321.html
Copyright © 2011-2022 走看看