zoukankan      html  css  js  c++  java
  • socket编程介绍

    MAC是平面寻址,IP是二级寻址

    单机模式------
    服务端
    import socket
    server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #AF_INET SOCK_STREAM
    server.bind(("0.0.0.0",8000))
    server.listen(5)
    print("--start--")
    conn,client_addr = server.accept()
    print(conn,client_addr)

    while True:
    data = conn.recv(1024) #最大接收1024字节
    print("recv from client:",data)
    conn.send(b"got msg")

    客户端:
    import socket

    client = socket.socket()
    client.connect(("localhost",8000))

    while True:
    msg = input("msg>>:").strip()
    if len(msg) == 0:continue
    client.send(msg.encode())
    print("send>>:",msg)

    data = client.recv(1024)
    print("receive from server>>:",data)

    并发模式:

    server端将执行的数据放到缓冲区,缓冲区满或者发送等待时间超时(一般在毫秒级)

    7、socketserver编程

    +------------+
    | BaseServer |
    +------------+
          |
          v
    +-----------+        +------------------+
    | TCPServer |------->| UnixStreamServer |
    +-----------+        +------------------+
          |
          v
    +-----------+        +--------------------+
    | UDPServer |------->| UnixDatagramServer |
    +-----------+        +--------------------+


    基本的socketserver代码
    import socketserver
    class MyTCPHandler(socketserver.BaseRequestHandler):
        def handle(self):
            # self.request is the TCP socket connected to the client
            self.data = self.request.recv(1024).strip()
            print("{} wrote:".format(self.client_address[0]))
            print(self.data)
            # just send back the same data, but upper-cased
            self.request.sendall(self.data.upper())
    if __name__ == "__main__":
        HOST, PORT = "localhost", 9999
        server = socketserver.TCPServer((HOST, PORT), MyTCPHandler)
        server.serve_forever()

    实现并发:

    socketserver并发,必须选择使用以下一个多并发的类
    class socketserver.ForkingTCPServer
    class socketserver.ForkingUDPServer
    class socketserver.ThreadingTCPServer
    class socketserver.ThreadingUDPServer

  • 相关阅读:
    RecyclerView,ListView first item get focus
    一种粗暴快速的Android全屏幕适配方案(转)
    谈谈单元测试之(一):为什么要进行烦人的单元测试(转)
    SCIgen与野鸡期刊的梗
    百度搜索仍然是【最快解决工作问题的方法】
    搭建minima主题的github博客网站
    本科期间的第一个专利:改卷筒的故事
    学习消费思维的【贫穷与富有】
    我的联系方式
    学习 GitHub 有什么好处?
  • 原文地址:https://www.cnblogs.com/feiyu_Team/p/6343530.html
Copyright © 2011-2022 走看看