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