python socket编程入门级
客户端
import socket import time sk = socket.socket() # 第一步:创建socket对象 address = ('127.0.0.1', 8080) # 协议是ip+端口(类型元组) sk.connect(address) # 第二步:建立链接 while True: inp = input('客户端>>>>>>>>>\n') if inp == 'exit': break sk.send(bytes(inp, 'utf8')) # 第三步:请求数据 time.sleep(1) # low方法防止粘包 data = sk.recv(1024) # 接收确认信息 print("接收服务端的数据", str(data, 'utf8')) sk.close()
服务端
import socket # family type # AF_INET,AF_INET6 # AF_UNIX # SOCK_STREAM:: TCP # SOCK_DGRAM :: UDP # sk只负责绑定端口等待链接,发送接收消息用conn。 sk = socket.socket() # 默认参数tcp address = ('127.0.1', 8080) sk.bind(address) # 绑定ip协议和端口 sk.listen(3) # 定义最大可以挂起连接数。 print('服务的waiting.......') while 1: conn, addr = sk.accept() # 等待接收来自客户端的信息 print(addr) while 1: try: data = conn.recv(1024) except Exception: break if not data: break print('接收到来自客户端的信息......', str(data, 'utf8')) inp = input('》》》》》》》》') conn.send(bytes(inp, 'utf8'))
使用多线程版
import socketserver class MyServer(socketserver.BaseRequestHandler): # 重写父类的方法 def handle(self): print('waiting.......') while 1: conn = self.request print(self.client_address) while 1: try: data = conn.recv(1024) except Exception: break if not data: break print('......', str(data, 'utf8')) inp = input('》》》》》》》》') conn.sendall(bytes(inp, 'utf8')) conn.close() if __name__ == '__main__': host = '127.0.0.1' ip = '8080' server = socketserver.ThreadingTCPServer((host, ip), MyServer)#多线程通话 # 不会出现在一个客户端结束后,当前服务器端就会关闭或者报错,而是继续运行,与其他的客户端继续进行通话。 server.serve_forever()