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

原文地址:https://www.cnblogs.com/feiyu_Team/p/6343530.html