zoukankan      html  css  js  c++  java
  • Python编程之socket

    1、TCP

    客户端:

    from socket import *
    ip_port = ("127.0.0.1",8888)
    back_log = 5
    buffer_size = 1024
    tcp_client = socket(AF_INET,SOCK_STREAM)
    tcp_client.connect(ip_port)
    while 1:
        msg = input(">>>>>>>:").strip()
        if not msg:continue
        tcp_client.send(msg.encode("utf-8"))
        print("客户端已发送消息",msg)
        data = tcp_client.recv(buffer_size)
        print("客户端收到的数据是",data.decode("utf-8"))
    tcp_client.close()

    服务端:

    from socket import *
    ip_port = ("127.0.0.1",8888)
    back_log = 5
    buffer_size = 1024
    tcp_server = socket(AF_INET,SOCK_STREAM)
    tcp_server.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)#解决服务端断开延时问题
    tcp_server.bind(ip_port)
    tcp_server.listen(back_log)
    print("服务端开始运行了")
    while 1:
        conn,adr = tcp_server.accept()#服务端阻塞
        print("双向连接是",conn)
        print("客户端地址是",adr)
        while 1:
            try:
                data = conn.recv(buffer_size)
                print("客户端发来的消息是",data.decode("utf-8"))
                conn.send(data.upper())
                print("服务端回复的消息是",data.upper(),"客户端消息回复成功")
            except Exception:
                break
        conn.close()
    tcp_server.close()

     2.UDP

    1、服务端

    from socket import *
    ip_port = ("127.0.0.1",8080)
    buffer_size = 1024
    udp_server = socket(AF_INET,SOCK_DGRAM)#数据报式套接字
    udp_server.bind(ip_port)
    while 1:
        data,adr = udp_server.recvfrom(buffer_size)
        print("服务端接受的数据是%s,%s"%(data,adr))#打印接受的数据
        udp_server.sendto(data.upper(),adr)
        print("服务端回复客户端的消息是%s"%data.upper())

    2、客户端

    from socket import *
    ip_port = ("127.0.0.1",8080)
    buffer_size = 1024
    udp_client = socket(AF_INET,SOCK_DGRAM)#数据报式套接字
    
    while 1:
        msg = input("输入要发的消息:").strip()
        udp_client.sendto(msg.encode("utf-8"),ip_port)
        data,adr = udp_client.recvfrom(buffer_size)
        print("客户端发出的消息是%s"%msg)
        print("客户端接受的数据是%s,%s" % (data, adr))  # 打印接受的数据

     3.NTP

    1、客户端

    from socket import *
    ip_port = ("127.0.0.1",8080)
    buffer_size = 1024
    udp_client = socket(AF_INET,SOCK_DGRAM)#数据报式套接字
    
    while 1:
        msg = input("输入要发的消息:").strip()
        udp_client.sendto(msg.encode("utf-8"),ip_port)
        data,adr = udp_client.recvfrom(buffer_size)
        print("客户端发出的消息是%s"%msg)
        print("客户端接受的返回的时间是%s,%s" % (data,adr))  # 打印接受的数据

    2、服务端

    from socket import *
    ip_port = ("127.0.0.1",8080)
    buffer_size = 1024
    udp_client = socket(AF_INET,SOCK_DGRAM)#数据报式套接字
    
    while 1:
        msg = input("输入要发的消息:").strip()
        udp_client.sendto(msg.encode("utf-8"),ip_port)
        data,adr = udp_client.recvfrom(buffer_size)
        print("客户端发出的消息是%s"%msg)
        print("客户端接受的返回的时间是%s,%s" % (data,adr))  # 打印接受的数据

     4、多并发服务端

    import socketserver
    class MyServer(socketserver.BaseRequestHandler):
        def handle(self):
            print(self.request)#coon
            print(self.client_address)#adr
            while 1:
                try:
                    #收消息
                    data = self.request.recv(1024)
                    if not data:
                        break
                    print("收到客户端的消息是",data)
                    #发消息
                    self.request.sendall(data.upper())
                except Exception as e:
                    print(e)
                    break
    if __name__ == '__main__':
        #多线程TCP服务端
        s = socketserver.ThreadingTCPServer(("127.0.0.1",8080),MyServer)
        s.serve_forever()
    

      

  • 相关阅读:
    CSS3新增文本属性
    CSS选择器
    【转】Java基础——面试题汇总
    【转】equals和==的区别
    【转】JRE和JDK的区别
    【转】深度学习常用的模型评估指标
    【转】使用Scanner输入字符串时next()和nextLine()区别
    JAVA操作ORACLE大对象
    ORACLE大对象存储
    iis是什么东西?
  • 原文地址:https://www.cnblogs.com/huoyunxieshen/p/10121772.html
Copyright © 2011-2022 走看看