TCP协议下的socket使用
服务器端模板 import socket server = socket.socket() server.bind(('192.168.12.211',16888)) #插入电话卡 server.listen() #开始监听 while True: client,addr = server.accept() #链接循环,可以不断接收新链接 while True: try: data = client.recv(1024) #循环收发消息 if not data: #判断消息是否为空 client.close() break print('收到客户端的消息:%s'%data.decode('utf-8')) client.send(data) except ConnectionResetError: #接收客户端关闭时的异常 print('客户端强行关闭链接') client.close() break break server.close()
客户端: import socket client = socket.socket() client.connect(('192.168.12.211',16888)) #链接到服务器 while True: msg = input('>>>>>:').strip() #循环发送信息 client.send(msg.encode('utf-8')) data = client.recv(1024) #接收服务器信息 print('收到服务器:%s'%data.decode('utf-8'))
基于UDP协议的 socket通讯
服务器端 import socket # UDP协议 在创建socket是 只有一个类型不同 server = socket.socket(socket.AF_INET,socket.SOCK_DGRAM,proto=0) server.bind(("127.0.0.1",8888)) while True: data,addr = server.recvfrom(1024) # 阻塞 直到收到数据为止 print("收到来自%s的消息:%s" % (data.decode("utf-8"),addr[0])) # 返回值为 数据 和 对方ip地址 和端口号 server.sendto(data.upper(),addr) server.close()
客户端 import socket client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM,0) while True: data = input(">>:").encode("utf-8") client.sendto(data,("127.0.0.1",8888)) d,addr = client.recvfrom(1024) print(d.decode("utf-8")) client.close()