tcp协议下的网络通信--网络通信的基础原理参考博客-‘’网络编程基础‘’

服务端 程序



import socket
phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 实例化需要三个参数 最后一个参数默认为0 一般不需要下写
phone.bind(('127.0.0.1', 8080)) # 绑定 元组内第一个ip第二个端口
phone.listen(5) # 进入监听状态 5代表半链接池的大小
conn, client_addr = phone.accept() # 两个返回值 一个三次握手建立好的链接,另一个客户端 地址
while True:
try:
date=conn.recv(1024)
conn.send(date.upper())#反馈回去一个大写的内容
except Exception:
break
conn.close() # 断开链接


客户端程序



import socket
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
phone.connect(('127.0.0.1',8080))
while True:
msg=input('输入内容').strip()
if len(msg)==0:continue
phone.send(msg.encode('utf-8'))
date=phone.recv(1024)
print(date.decode('utf-8'))

phone.close()


接下来我们看一下udp协议下的网路通信

服务端程序



'''基于udp的服务端程序'''
import socket
serve=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)#实例化得到套接字对象

serve.bind(('127.0.0.1',8080))
while True:
date,client_addr=serve.recvfrom(1024)#接受到两个值 数据以及地址
serve.sendto(date.upper(),client_addr)#需要定义两个参数 第一个反馈给客户端的参数 第二个发送给谁也就是ip+端口

serve.close()


客户端程序



'''基于udp的客户端程序'''
import socket
client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
while True:
msg=input('请输入参数')
if msg=='q':break
client.sendto(msg.encode('utf-8'),('127.0.0.1',8080))
date,serve_addr=client.recvfrom(1024)
print(date.decode('utf-8'))
client.close()


接下来总结一下每一步的操作

 



'''基于udp的对话服务端程序'''
import socket
serve=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)#实例化

serve.bind(('127.0.0.1',8080))#绑定ip+端口
while True:
try:#为了防止服务器崩溃 捕捉到异常结束通信断开链接
date,client_addr=serve.recvfrom(1024)#等待接收客户端的消息 有两个返回值 数据以及地址
serve.sendto(date.upper(),client_addr)#对数据进行处理返回给客户端
except Exception:#任何异常
break
serve.close()#断开链接


 



'''基于udp的对话客户端'''
import socket
client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #步骤一:实例化拿到对象
while True:
msg=input('输入你要发送的消息:').strip()
if msg=='q':break#输入q推出客户端
client.sendto(msg.encode('utf-8'),('127.0.0.1',8080))#发送
date,serve_addr=client.recvfrom(1024)#等待接收
print(date.decode('utf-8'))#打印服务端发过来的内容

client.close()