zoukankan      html  css  js  c++  java
  • 网络编程

    Python  网络编程

       Python 提供了两个级别访问的网络服务:

                             1.低级别的网络服务支持基本的  Socket,它提供了便准的  BSD Sockets API  , 可以访问底层操作系统Socket接口的全部方法

                             2.高级别的网络服务模块  SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发

      什么是Socket:

           Socket 又称’套接字‘ 应用程序通常通过’套接字‘向网络发出请求或者应答网络请求,使主机或者一台计算机上的进程间可以通讯

    参数:

      family:套接字家族可以使 AF_UNIX或者AF_INET

      type:套接字类型可以根据是面向连接的还是非链接分为SOCK_STREAM或SOCK_DGRAM

      protocol : 一般不填默认为0

    Socket对象(内建)方法

       s.bind()  : 绑定地址(host,port)到套接字, 在AF_INET下,以元组(host,port)的形式表示地址。

       s.listen()  : 开始TCP监听。backlog指定在拒绝连接之前,操作系统可以挂起的最大连接数量。该值至少为1,大部分应用程序设为5就可以了。

       a.accept()  : 被动接受TCP客户端连接,(阻塞式)等待连接的到来

       客户端套接字:

        s.connect()  :主动初始化TCP服务器连接,。一般address的格式为元组(hostname,port),如果连接出错,返回socket.error错误。                 s.connect_ex() :      connect()函数的扩展版本,出错时返回出错码,而不是抛出异常

      公共用途的套接字函数:

         s.recv() :  接收TCP数据,数据以字符串形式返回,bufsize指定要接收的最大数据量。flag提供有关消息的其他信息,通常可以忽略

       s.send()  ;  发送TCP数据,将string中的数据发送到连接的套接字。返回值是要发送的字节数量,该数量可能小于string的字节大小。

        s.close() : 关闭套接字

     

    简单套接字实现:

     1 客户端:
     2 import socket
     3 #1、买手机
     4 phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
     5 
     6 #2、打电话
     7 phone.connect(('127.0.0.1',8080))
     8 
     9 #3、发收消息
    10 phone.send('hello'.encode('utf-8'))
    11 data=phone.recv(1024)
    12 print(data.decode('utf-8'))
    13 
    14 #4、挂电话
    15 phone.close()
    16 
    17 服务端:
    18 import socket
    19 #1、买手机
    20 phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    21 
    22 #2、绑定手机卡
    23 phone.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) #就是它,在bind前加
    24 phone.bind(('127.0.0.1',8080))
    25 
    26 #3、开机
    27 phone.listen(5)
    28 
    29 #4、等电话连接
    30 print('starting...')
    31 conn,addr=phone.accept()
    32 print('IP:%s,PORT:%s' %(addr[0],addr[1]))
    33 
    34 #5、收发消息
    35 data=conn.recv(1024) #最大收1024
    36 conn.send(data.upper())
    37 
    38 #6、挂电话
    39 conn.close()
    40 
    41 #7、关机
    42 phone.close()

    加上循坏:

    客户端:
    import socket
    #1、买手机
    phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    
    #2、打电话
    phone.connect(('127.0.0.1',8082))
    
    #3、发收消息
    while True:
        msg=input('>>: ').strip()
        if not msg:continue
        phone.send(msg.encode('utf-8'))
        # print('has send===>')
        data=phone.recv(1024)
        # print('has recv')
        print(data.decode('utf-8'))
    
    #4、挂电话
    phone.close()
    
    服务端:
    import socket
    #1、买手机
    phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    
    #2、绑定手机卡
    phone.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) #就是它,在bind前加
    phone.bind(('127.0.0.1',8082))
    
    #3、开机
    phone.listen(5)
    
    #4、等电话连接
    print('starting...')
    while True: #连接循环
        conn,addr=phone.accept()
        print('IP:%s,PORT:%s' %(addr[0],addr[1]))
    
        #5、收发消息
        while True: #通信循环
            try:
                data=conn.recv(1024) #最大收1024
                print(data)
                if not data:break #针对linux
                conn.send(data.upper())
            except Exception:
                break
    
        #6、挂电话
        conn.close()
    
    #7、关机
    phone.close()
  • 相关阅读:
    Solved:Spring Junit Test NoSuchMethodError
    Stack实现
    CLRS10.2-8练习
    CLRS10.2-7练习
    CLRS10.2-4练习
    CLRS10.1-7练习
    CLRS10.1-6练习
    算法:吸血鬼数字算法
    CLRS最大子数组问题
    VS快捷键
  • 原文地址:https://www.cnblogs.com/ez2z/p/7593331.html
Copyright © 2011-2022 走看看