Python的socket编程

本文介绍了Python中如何进行UDP数据的发送与接收,强调了数据通信中单工、半双工和全双工的区别,并简单提及了TCP客户端和服务器的基本概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用udp发送数据

import socket


def main():
    # 创建一个套接字
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    # 可以使用套接字收发数据
    # udp_socket.sendto(内容, (IP, 端口))
    # 发送的内容必须是byte类型,不能是str
    # udp_socket.sendto("test_content", ('192.168.1.1', 8080))
    
    # 绑定本地信息,一直使用7789端口发送
    local_addr = ("", 7789)
    udp_socket.bind(local_addr)
    
while True:
   		 # 获取要发送的数据
    	send_data = input("请输入你要发送的数据")
    	udp_socket.sendto(send_data.encode("utf-8"), ('192.168.1.2', 8080))

    # 关闭套接字
   	udp_socket.close()


if __name__ == "__main__":
    main()

使用udp接收数据

from socket import *

# 创建一个套接字
udp_socket = socket(AF_INET, SOCK_DGRAM)

# 绑定本地的网络信息
local_addr = ("", 7778)     # ip地址和端口号,IP一般不用谢写
udp_socket.bind(local_addr)

while True:
	# 接收数据
	recv_data = udp_socket.recvfrom(1024)

	# 显示接收到的数据
	# 显示接收到的数据
	recv_msg = recv_data[0]
	send_addr = recv_data[1]
	print("%s:%s" % (str(send_addr), recv_msg.decode("utf-8")))  # linux用utf-8编码的,windows也用utf-8解码,windows用gbk编码的,linux用gbk解码

# 关闭套接字
udp_socket.close()

注意: 数据的发送和接收都是需要使用套接字的
单工:只能接收,不能发送;或者只能发送,不能接收
半双工:可以发送,可以接收,但是不能同时进行
全双工:可以同时发送和接收

tcp客户端

import socket


def main():
    # 创建tcp的套接字
    tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 链接服务器
    # ver_port = int(input("请输入要连接的服务器port:"))
    # server_addr = (server_ip, server_port)
    tcp_socket.connect(('192.168.232.232', 7788))

    while True:
        # 发送数据
        send_msg = input("请输入要发送的数据:")
        if send_msg == "exit":
            break
        tcp_socket.send(send_msg.encode("utf-8"))

        recv_data = tcp_socket.recv(1024)
        print("%s" % recv_data.decode("utf-8"))
        # 关闭套接字
    tcp_socket.close()


if __name__ == "__main__":
    main()

tcp服务器

import socket


def main():
    # 创建套接字
    tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 绑定ip和端口
    tcp_server_socket.bind(("", 7788))

    # listen使套接字变为被动连接
    tcp_server_socket.listen(128)

    while True:
        # accept,等待客户端的链接
        # 监听套接字负责等待新的客户端接入,产生的新的套接字负责为当前用户服务
        client_socket, client_addr = tcp_server_socket.accept()
        print("%s :已接入" % str(client_addr))

        while True:
            # 接收客户端发送的数据
            # 如果recv解堵塞,那么有两种方式:
            # 1.客户端发送过来数据
            # 2.客户端调用了close
            recv_data = client_socket.recv(1024)

            if recv_data:
                print("%s" % recv_data.decode("utf-8"))
                client_socket.send("ok".encode("utf-8"))
            else:
                break
        client_socket.close()
        print("%s:已关闭" % str(client_addr))
    tcp_server_socket.close()


if __name__ == "__main__":
    main()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值