socket套接字(udp)
1.什么是socket
socket(简称 套接字) 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:
它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的
例如我们每天浏览网页、QQ 聊天、收发 email 等等
2.创建socket
在 Python 中 使用socket 模块的函数 socket 就可以完成:
1 import socket
2 socket.socket(AddressFamily,Type)
udp_socket发送数据:
发送数据流程:
1.创建套接字
2.发送数据
3.关闭套接字
1 import socket
2
3
4 def main():
5 # 1.创建udp套接字
6 udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
7 # 绑定端口号
udp_socket.bind(("",7890))
while True:
8 # 2.准备接收方的地址 10.212.67.23表示目的ip地址 8080表示目的端口
9 dest_addr = ('10.212.67.23', 8080)
10
11 # 3.从键盘输入数据
12 send_data = input('请输入需要发送的数据:')
13
14 # 如果输入exit则退出
15 if send_data == 'exit':
16 break
17 # 4.可以使用套接字发送数据
18 udp_socket.sendto(send_data.encode('GBK'), dest_addr)
19 # 5.关闭套接字
20 udp_socket.close()
21
22
23 if __name__ == '__main__':
24 main()
udp_socket接收数据:
接收数据流程:
1.创建套接字
2.绑定本地自己的信息(ip和port)
3.接收信息
4.关闭套接字
1 import socket
2
3
4 def main():
5 while True:
6 # 1.创建套接字
7 udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
8 # 2.绑定一个本地信息
9 localaddr = ("", 7788)
10 udp_socket.bind(localaddr)
11 # 3.接收数据
12 recv_data = udp_socket.recvfrom(1024)
13 # 4.打印接收的数据
14 # 这个是接收到的信息,接收到的数据是一个元组
15 print(recv_data)
16 # 第一个元素是对方发送的数据
17 print(recv_data[0].decode('GBK'))
18 # 第二个元素为对方的ip和端口
19 print(recv_data[1])
20 # 关闭套接字
21 udp_socket.close()
22
23
24 if __name__ == "__main__":
25 main()
函数 socket.socket 创建一个 socket,该函数带有两个参数:
Address Family:可以选择 AF_INET(用于 Internet 进程间通信) 或者 AF_UNIX(用于同一台机器进程间通信),实际工作中常用AF_INET
Type:套接字类型,可以是 SOCK_STREAM(流式套接字,主要用于 TCP 协议)或者 SOCK_DGRAM(数据报套接字,主要用于 UDP 协议)
3.udp聊天室
1 import re
2 import socket
3
4
5 def send_msg(udp_socket):
6 '''从键盘上输入数据,将其发送给对方'''
7 # 1.从键盘上输入数据
8 msg = input('请输入你要发送的数据:')
9 # 2.获取对方ip
10 dest_ip = input('请输入对方的ip:')
11 # 3.获取对方的port
12 try:
13 dest_port = int(input('请输入对方的port:'))
14 except:
15 print('输入的端口号有误,请重新输入:')
16 dest_port = int(input('请输入对方的port:'))
17 # 4.发送数据
18 udp_socket.sendto(msg.encode('gbk'), (dest_ip, dest_port))
19 print('数据发送成功!')
20
21
22 def recv_msg(udp_socket):
23 '''接收别人发送的信息'''
24 # 1.接收信息
25 recv_data = udp_socket.recvfrom(2048)
26 print('接收到的数据是:{}'.format(recv_data[0].decode('gbk')))
27
28
29 def main():
30 # 1.创建套接字
31 udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
32 # 2.绑定本地信息
33 udp_socket.bind(("", 7800))
34 # 3.选择功能
35 while True:
36 print('*' * 20)
37 print('1.发送信息')
38 print('2.接收消息')
39 print('*' * 20)
40 num = input('请输入你需要的功能:(输入exit退出)')
41 if num == '1':
42 send_msg(udp_socket)
43 elif num == '2':
44 recv_msg(udp_socket)
45 elif num == 'exit':
46 break
47 else:
48 print('输入有误,请重新输入!!!')
49
50
51 if __name__ == '__main__':
52 main()
作者:Ambitious
-------------------------------------------
个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!
万水千山总是情,打赏一分行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•̀ω•́)っ✎⁾⁾!