Python网络编程—socket套接字编程(UDP)

套接字介绍

1.套接字 : 实现网络编程进行数据传输的一种技术手段

2.Python实现套接字编程:import socket

3.套接字分类

  • 流式套接字(SOCK_STREAM): 以字节流方式传输数据,实现tcp网络传输方案。(面向连接--tcp协议--可靠的--流式套接字)
  • 数据报套接字(SOCK_DGRAM):以数据报形式传输数据,实现udp网络传输方案。(无连接--udp协议--不可靠--数据报套接字)

UDP套接字编程

服务端流程

1.创建数据报套接字

sockfd = socket(AF_INET,SOCK_DGRAM)

2.绑定地址

sockfd.bind(addr)

3.消息收发

data,addr = sockfd.recvfrom(buffersize)

  • 功能: 接收UDP消息
  • 参数: 每次最多接收多少字节
  • 返回值: data 接收到的内容
  •     addr 消息发送方地址

n = sockfd.sendto(data,addr)

  • 功能: 发送UDP消息
  • 参数: data 发送的内容 bytes格式
  •     addr 目标地址
  • 返回值:发送的字节数

4.关闭套接字

sockfd.close()

 1 """
 2 重点代码
 3 """
 4 
 5 from socket import *
 6 
 7 # 创建套接字
 8 sockfd = socket(AF_INET, SOCK_DGRAM)
 9 
10 # 绑定地址
11 server_addr = ('127.0.0.1', 8888)
12 sockfd.bind(server_addr)
13 
14 # 收发消息
15 while True:
16   data, addr = sockfd.recvfrom(1024)
17   print("收到的消息:", data.decode())
18   sockfd.sendto(b'Receive', addr)
19 
20 # 关闭套接字
21 sockfd.close()
UDP服务端流程

客户端流程

1.创建套接字

2.收发消息

3.关闭套接字

 1 """
 2 重点代码
 3 """
 4 
 5 from socket import *
 6 
 7 # 服务端地址
 8 ADDR = ('127.0.0.1',8888)
 9 
10 # 创建套接字
11 sockfd = socket(AF_INET,SOCK_DGRAM)
12 
13 # 循环发送消息
14 while True:
15   data = input("Msg>>")
16   if not data:
17     break
18   sockfd.sendto(data.encode(),ADDR)
19   msg,addr = sockfd.recvfrom(1024)
20   print("From server:",msg.decode())
21 
22 sockfd.close()
udp客户端流程

练习 :  使用udp完成单词查询,要求一个服务端拥有单词本,从客户端可以循环输入单词,得到单词解释.客户端可以直接回车或者发送特殊字符表示退出

 1 from socket import  *
 2 
 3 DICT_TEXT = './dict.txt'
 4 
 5 def find_word(word):
 6   f = open(DICT_TEXT)
 7   for line in f:
 8     tmp = line.split(' ')[0]
 9     # 遍历的单词已经大于目标
10     if tmp > word:
11       return "没有找到该单词"
12     elif tmp == word:
13       return line
14   else:
15     return "没有找到该单词"
16 
17 s = socket(AF_INET,SOCK_DGRAM)
18 s.bind(('0.0.0.0',8888))
19 
20 while True:
21   data,addr = s.recvfrom(1024)
22   mean = find_word(data.decode())
23   s.sendto(mean.encode(),addr)
24 
25 s.close()
26 --------------------------------------
27 """
28 udp客户端流程
29 """
30 
31 from socket import *
32 
33 # 服务端地址
34 ADDR = ('127.0.0.1',8888)
35 
36 # 创建套接字
37 sockfd = socket(AF_INET,SOCK_DGRAM)
38 
39 # 循环发送消息
40 while True:
41   data = input("Word>>")
42   if not data:
43     break
44   sockfd.sendto(data.encode(),ADDR)
45   msg,addr = sockfd.recvfrom(1024)
46   print("From server:",msg.decode())
47 
48 sockfd.close()
练习

猜你喜欢

转载自www.cnblogs.com/maplethefox/p/10988990.html