欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python实现socket通信

程序员文章站 2022-03-17 20:49:30
...

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()
  • 演示截图

python实现socket通信python实现socket通信

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