#TCP协议实现(发送消息的顺序无要求)(以conn为对象发送和接收消息)(字节流) #-------serve层 import socket import time sk=socket.socket() sk.bind(('10.70.2.143',8080)) #1.服务器地址 2.服务器端口,0~65535范围,但是0~1023最好不要用 sk.listen() #监听连接(所有电话集中在这里) while 1: conn,addr=sk.accept() #conn为客户端的ip地址,addr为客户端的端口(开始一个一个循环接电话) while 1: str_msg=conn.recv(1024).decode('utf-8') #1024为传递数据的大小,recv为需要和谁通信就用其recv,比如说和这个人通电话;中文解码 print(str_msg) if str_msg == 'q': break; #服务器输入 msg_s = input(">>>") conn.send(msg_s.encode('utf-8')) if msg_s == 'q': break; conn.close(); #可以理解为挂断这个人的电话,但是并不关闭服务器(进入下一个循环,即接听下一个电话) sk.close() #关闭服务器(即使有其他电话打进来也毫无作用) #-------client层 import socket sk = socket.socket() sk.connect(('10.70.2.143',8080)) #1.服务器的IP 2.服务器的端口 while 1: msg_s = input('>>>') sk.send(msg_s.encode('utf-8')) #传中文需要编码为utf-8格式 if msg_s == 'q': break msg_r = sk.recv(1024).decode('utf-8') if msg_r == 'q': break print(msg_r) sk.close() #--------------------------------------------------------------------- #UDP协议实现(必须是客户端先发消息)(以addr为对象发送和接收消息)(允许一个服务器同时和多个客户端通信) #-------server层 import socket sk = socket.socket(type=socket.SOCK_DGRAM)# udp协议 sk.bind(('10.70.2.143',8080)) while 1: msg_r,addr = sk.recvfrom(1024)# 接收来自于哪里的消息 print(msg_r.decode('utf-8'),addr) msg_s = input(('>>>')) sk.sendto(msg_s.encode('utf-8'),addr)# 发给谁的消息 sk.close() #-------client层 import socket sk = socket.socket(type=socket.SOCK_DGRAM) while 1: msg_s = input('>>>') sk.sendto(msg_s.encode('utf-8'),('10.70.2.143',8080)) msg_r,addr = sk.recvfrom(1024) print(msg_r.decode('utf-8')) sk.close()