单并发: 同时连接服务器只有一个client
server:
import socket
sock = socket.socket()
sock.bind(('localhost',6969))
sock.listen()
print("kai shi le")
conn,addr = sock.accept()
#conn为服务端信息:<socket.socket fd=304, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 6969), raddr=('127.0.0.1', 52369)>
#addr为客户端信息:('127.0.0.1', 52369)
while True:
data = conn.recv(8096).decode()
print('recv:',data)
resp = data.upper()
conn.send(resp.encode())
client:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# author aliex-hrg
import socket
sock = socket.socket()
sock.connect(('localhost',6969))
flag = False
while not flag:
data = input(">>:").strip()
if data == "b":flag = True
if len(data) == 0:continue
sock.send(data.encode())
recv_data = sock.recv(8096)
print("recv:",recv_data.decode())
sock.close()
多并发: 同时连接服务器可以有多个client
server:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# author aliex-hrg
import socketserver
class MyTCPHandler(socketserver.BaseRequestHandler):
def handle(self):
'''try内的代码就是要实现的功能,目前是实现小写转大写,可以自定义,
try是在客户端结束时不报错
'''
try:
while True:
self.data = self.request.recv(1024).strip()
print("{} wrote:".format(self.client_address[0]))
print(self.data)
self.request.sendall(self.data.upper())
except ConnectionResetError as e:
print(e)
if __name__ == "__main__":
HOST, PORT = "localhost", 6969
server = socketserver.ThreadingTCPServer((HOST, PORT), MyTCPHandler)
server.serve_forever()
client:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# author aliex-hrg
import socket
sock = socket.socket()
sock.connect(('localhost',6969))
flag = False
while not flag:
data = input(">>:").strip()
if data == "b":flag = True
if len(data) == 0:continue
sock.send(data.encode())
recv_data = sock.recv(8096)
print("recv:",recv_data.decode())
sock.close()
...
浙公网安备 33010602011771号