python实现socket通信

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

image.png image.png

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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值