WELCOME

不积跬步,无以至千里;不积小流,无以成江海。

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()

 

posted @ 2022-04-11 23:26  Ambitious~  阅读(79)  评论(0)    收藏  举报