• python socket模块


      1.socket参数

    socket.socket(family=AF_INET,type=SOCK_STREAM,proto=0,fileno=None)
    
    familt:
        AF_INET:网络文件套接字,默认
        AF_UNIX:本地文件套接字
    type:
        SOCK_STREAM:TCP协议,默认
        SOCK_DGRAM:UDP协议
    proto:通常为0
    fileno:通常为None
    

      2.TCPsocket常用方法

    TCP

    socket

    client

    server

    实例化

    sk = socket.socket()

    sk = socket.socket()

    绑定地址
    开启监听

    /

    sk.bind(('127.0.0.1',8888))
    sk.listen()

    连接地址

    sk.connect(('127.0.0.1',8888))
    sk.connect_ex(('127.0.0.1',8888))
    #连接错误不报错,返回错误代码

    /

    接收请求

    /

    conn,addr = sk.accept()

    发送消息

    sk.send('hi!'.encode('utf-8'))
    sk.sendall('hi!'.encode('utf-8'))
    #发送数据过大,可以用sendall()

    conn.send('hi'.encode('utf-8'))
    sk.sendall('hi!'.encode('utf-8'))  

    接收消息

    ret = sk.recv(1024)

    ret = conn.recv(1024)

    关闭client

    /

    conn.close()

    关闭server

    sk.close()

    sk.close()

       3.UDPsocket常用方法

    UDP

    socket

    client

    server

    实例化

    sk = socket.socket(type=socket.SOCK_DGRAM)

    sk = socket.socket(type=socket.SOCK_DGRAM)

    绑定地址

    /

    sk.bind(('127.0.0.1',8888))

    接收消息

    message,ip = sk.recvfrom(1024)

    message,ip = sk.recvfrom(1024)

    发送消息

    sk.sendto(str,ip)

    sk.sendto(str,ip)

    断开连接

    sk.close()

    sk.close()

      2.基于TCP协议的服务端和客户端

    #服务端
    import socket
    sk = socket.socket()
    sk.bind(('127.0.0.1',8888))  #把地址绑定到套接字,IP为字符串,端口为数字
    sk.listen()          #监听此连接
    conn,addr = sk.accept() #接受客户端链接
    ret = conn.recv(1024)  #接收客户端信息,指定接收的字节
    print(ret)       #打印客户端发来的信息
    conn.send('hi'.encode('utf-8'))        #向客户端发送信息,编码为字节形式
    conn.close()       #关闭客户端套接字
    sk.close()        #关闭服务器套接字(可选)
    
    #客户端
    import socket
    sk = socket.socket()           # 创建客户套接字
    sk.connect(('127.0.0.1',8898))    # 尝试连接服务器
    sk.send('hello!'.encode('utf-8'))   #发送消息,以字节形式发送
    ret = sk.recv(1024)         # 接收回信
    print(ret)
    sk.close()  
    

      3.基于UDPsocket的服务端和客户端

    #服务端
    import socket
    sk = socket.socket(type=socket.SOCK_DGRAM)    #指定UDP协议
    sk.bind(('127.0.0.1',8888))     #绑定端口地址
    msg,ip = sk.recvfrom(1024)    #接收请求
    str = 'hahaha'.encode('utf-8')
    sk.sendto(str,ip)       #发送给客户端
    sk.close()   #关闭连接
    
    #客户端
    import socket
    sk = socket.socket(type=socket.SOCK_DGRAM)   #指定UDP协议
    ip = ('127.0.0.1',8888)
    str = 'hi'.encode('utf-8')
    sk.sendto(str,ip)      #发送消息
    msg,ip = sk.recvfrom(1024)    #接收消息
    print(msg,ip)
    sk.close()     #关闭连接
    

      

      4.多连接TCPsocket服务端-socketserver

    import socketserver
    class MySocket(socketserver.BaseRequestHandler):
        def handle(self):# 这个方法的名字是固定的,必须是这个名字
            # 收发的逻辑代码
            msg = self.request.recv(1024).decode('utf-8')
            self.request.send(msg.upper().encode('utf-8'))
    
    server = socketserver.TCPServer(('127.0.0.1',8080),MySocket)# 固定的
    server.serve_forever()# 开启一个永久性的服务
    

      

    初学linux,每学到一点东西就写一点,如有不对的地方,恳请包涵!
  • 相关阅读:
    分布式缓存重建并发冲突和zookeeper分布式锁解决方案
    C# Datatable、DataReader等转化json
    OpenResty部署nginx及nginx+lua
    zookeeper+kafka集群的安装
    缓存数据生产服务的工作流程
    实现缓存与数据库双写一致性保障
    eclipse不提示问题
    Redis 多级缓存架构和数据库与缓存双写不一致问题
    代码这样写更优雅(Python版)
    java string.getBytes(“UTF-8”) javascript equivalent
  • 原文地址:https://www.cnblogs.com/forlive/p/11542282.html
Copyright © 2020-2023  润新知