网络编程基础(下)
创始人
2024-06-03 08:12:36
0

7 udp套接字示例

7.1 udp简单示例

  • udp服务端

import socket
ip_port = ('127.0.0.1', 9000)# 创建一个服务器的套接字
udp_server = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)# 绑定服务器套接字
udp_server.bind(ip_port)# 接受客户端的信息
msg, addr = udp_server.recvfrom(1024)
print(msg, addr)# 发送信息
udp_server.sendto("hello".encode(), addr)
  • udp客户端

import socket
ip_port = ('127.0.0.1', 9000)# 创建一个客户端套接字
udp_client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 输入发送的数据
msg = input('>>: ').strip()# 发送信息给服务器
udp_client.sendto(msg.encode('utf-8'), ip_port)# 接受服务器的信息
back_msg, addr = udp_client.recvfrom(1024)
print(back_msg.decode('utf-8'), addr)

7.2 udp聊天器示例

  • udp服务器

import socket
ip_port = ('127.0.0.1', 8081)
# 创建一个服务器套接字
udp_server_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 绑定IP地址和端口号
udp_server_sock.bind(ip_port)# 循环收发消息
while True:# 接收qq_msg, addr = udp_server_sock.recvfrom(1024)print('来自[%s:%s]的一条消息:%s' % (addr[0], addr[1], qq_msg.decode('utf-8')))# 发送back_msg = input('回复消息: ').strip()udp_server_sock.sendto(back_msg.encode('utf-8'), addr)
  • udp客户端

import socketudp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)qq_name_dic = {'乔治': ('127.0.0.1', 8081),'james': ('127.0.0.1', 8082),'苯环': ('127.0.0.1', 8083),'岳岳': ('127.0.0.1', 8084),
}while True:qq_name = input('请选择聊天对象: ').strip()while True:msg = input('请输入消息,回车发送: ').strip()if msg == 'quit':breakif not msg or not qq_name or qq_name not in qq_name_dic:continueudp_client_socket.sendto(msg.encode('utf-8'), qq_name_dic[qq_name])back_msg, addr = udp_client_socket.recvfrom(1024)print('来自[%s:%s]的一条消息:%s' % (addr[0], addr[1], back_msg.decode('utf-8')))

8 tcp套接字示例

tcp是基于连接的,必须先启动服务器,然后在启动客户端去连接服务器

8.1 tcp套接字工作原理

8.2 tcp简单示例

  • tcp服务端

import socketip_port = ('127.0.0.1', 9000)  # 电话卡# 创建服务器套接字
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 把地址绑定给套接字
s.bind(ip_port)
# 监听链接
s.listen(5)# 接受客户端连接
conn, addr = s.accept()
# print(conn)
# print(addr)
print('接到来自%s的电话' % addr[0])# 对话
msg = conn.recv(1024)
print(msg.decode(), type(msg))
conn.send("hi".encode())conn.close()  # 关闭客户端套接字
s.close()  # 关闭服务器套接字
  • tcp客户端

import socketip_port = ('127.0.0.1', 9000)# 创建客户端套接字
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 尝试连接服务器
s.connect_ex(ip_port)#对话
s.send('hello world'.encode('utf-8'))
feedback = s.recv(1024)
print(feedback.decode('utf-8'))# 关闭客户端套接字
s.close()

8.3 tcp改进示例

  • tcp服务端改进版

import socket
ip_port = ('127.0.0.1', 8081)s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(ip_port)
s.listen(5)while True:conn, addr = s.accept()# print(conn)# print(addr)print('接到来自%s的电话' % addr[0])while True:msg = conn.recv(1024)print(msg.decode(), type(msg))str = input(">>>")conn.send(str.encode())conn.close()
  • tcp客户端改进版

import socket
ip_port = ('127.0.0.1', 8081)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.connect_ex(ip_port)while True:msg = input('>>: ').strip()if len(msg) == 0:continues.send(msg.encode('utf-8'))feedback = s.recv(1024)print(feedback.decode('utf-8'))s.close()

9 tcp的三次握手四次挥手(面试常考)

  • 流程图

  • 术语

  • SYN:同步位,SYN=1,表示进行一个连接请求。

  • ACK:确认位,ACK=1,确认有效,ACK=0,确认无效。

  • ack:确认号,对方发送序号+1。

  • seq:序号。

  • FIN:断开连接并且会停止发送数据。

相关内容

热门资讯

小失误酿成大错的事例(简短的就... 小失误酿成大错的事例(简短的就好) 木桶 1249年,位于现在意大利北部的博洛尼亚市当时还是...
关于杨幂与冯绍峰的恋情是真的吗 关于杨幂与冯绍峰的恋情是真的吗早就出了。 就算是假的、 你觉得你会有机会吗?是真的,我亲眼所见...
距中考不过100天,从现在开始... 距中考不过100天,从现在开始努力,我还来得及吗?现在离中考不到100天了现在学校有在给我们施加压力...
原油:WTI两连跌 交易员准备...   原油连续第二天下跌,OPEC+会议即将召开,预计此次会议将再次大幅提高产量,而美国总统唐纳德·特...
交友的成语及意思 交友的成语及意思1、惺惺相惜:遇到性格、志向和兴趣都相同的人,两个人互相爱护和支持。 2、忘年之交...
您的快递已被消火栓签收?违法!   本报记者 张宇 实习生 罗乐渝  快递来了收件人不在家,放在哪儿?记者近日采访发现,多家快递公司...
市关工委青少年党史学习月启动 转自:天津日报  本报讯(记者 辛璇)用笔墨诉说初心,用色彩描绘信仰。7月3日,“绘红色记忆,忆时代...
小熊的汽车玩具 小熊的汽车玩具从前,一只小熊过生日,小熊的妈妈送给小熊一个汽车玩具。他高兴极了。 一天,小猫去找小...
小说,男主一开始穿越成婴儿被人... 小说,男主一开始穿越成婴儿被人追杀我家狐妖先生 作者: 初夏 简介: 曼珠,沙华。生生世世不能在一起...
《甄嬛传》里的年妃飞扬跋扈,历... 《甄嬛传》里的年妃飞扬跋扈,历史上的她真的是这样的吗?历史上的年妃并不是这样的性格,历史上的年妃是一...