socket套接字
套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合。网络上各种服务都是基于socket完成通信的
我的理解就是网络通信需要使用IP 和 port,socket将这二者整合在一起,这样程序员就不用管用TCP/IP层怎么实现的,只需要关注编程部分就可以了。
- 创建socket:
import socket
s = socket.socket(AddressFamily, Type)
"""
socket函数有两个参数
AddressFamily:
通常只用AF_INET
Type:
可以是SOCK_STREAM,代表是TCP协议
可以是SOCK_DGRAM,代表是UDP协议
"""
s.close()
- 创建一个socket实例一般按如下步骤:
- 创建socket实例
- 执行程序
- 关闭socket
发送数据案例
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
while True:
text = input("请输入你想发送的内容,回车结束程序")
if not text:
break
# 将内容发送到指定的客户端
s.sendto(text.encode("utf-8"), ("172.25.0.1", 8080))
s.close()
- 演示截图
import socket
def main():
# 发送数据部分
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
while True:
text = input("请输入你想发送的内容,回车结束程序")
if not text:
break
# 将内容发送到指定的客户端
s.sendto(text.encode("utf-8"), ("172.25.0.1", 8080))
s.close()
# 接受数据
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
local_address = ('', 7788)
s.bind(local_address)
receive_date = s.recvfrom(1024)
receive_message = receive_date[0]
receive_address = receive_date[1]
print("%s:%s" % (receive_address, receive_message.decode("gbk")))
s.close()
"""
聊天器
# 发送数据功能
def send_message(udp_socket):
pass
# 接受数据功能
def receive_message(udp_socket):
pass
def main():
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
local_address = ('', 7788)
udp_socket.bind(local_address)
while True:
print("=" * 50)
print("1:发送消息")
print("2:接收消息")
print("=" * 50)
user_choice = input("请输入你的选择:")
if user_choice == "1":
send_message(udp_socket)
elif user_choice == "2":
receive_message(udp_socket)
else:
print("输入有误,请重新输入...")
udp_socket.close()
"""
if __name__ == "__main__":
main()