Python - 网络编程之Socket

本文介绍了如何使用Python的socket库实现UDP和TCP协议下的数据交换,并详细展示了通过socket进行简易文件下载的过程。包括客户端和服务端的搭建、消息收发、文件读取与发送等关键步骤。

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

1. socket的使用
UDP协议
使用socket方法创建会话连接
AF_INET: 表示这个socket是用来进行网络连接
SOCK_DGRAM:表示连接是一个UDP连接
# /usr/bin/python3
# —*— encoding:utf-8 —*—

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(('30.208.35.60', 8000))

# 使用sendto()方法实现消息发送
s.sendto('massgerInfo'.encode('utf-8'), ('30.208.35.60', 8000))

data, addr = s.recvfrom(1024)

print('{}:{}\n{}'.format(addr[0],addr[1],data.decode('utf-8')))

# 关闭会话连接
# s.close()

TCP协议
TCP客户端
import socket

# socket.SOCK_STREAM:表示建立一个TCP协议的连接
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 使用connect()方法与服务端建立TCP连接
s.connect(('30.208.35.60', 9090))

# 使用send()方法实现消息发送
s.send('TCP协议发送信息'.encode('utf-8'))

TCP服务端
# /usr/bin/python3
# —*— encoding:utf-8 —*—

import socket

# 创建一个TCP Socket连接
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定服务器IP及服务端口
server.bind(('30.208.35.60', 9090))
# 服务监听(队列)
server.listen(128)
# 使用accept()方法接收客户端连接请求
data = server.accept()
print(data)

# 允许客户端的TCP连接请求
clinet_socket, clinet_addr = server.accept()
# 接收客户端传递的数据
content = clinet_socket.recv(1024).decode('utf8')

print('接收到来自【{}】端口为:【{}】的数据信息,内容为:{}'.format(clinet_addr[0], clinet_addr[1], content))
========================
(<socket.socket fd=4, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('30.208.35.60', 9090), --> 客户端的socket数据
raddr=('30.208.44.238', 49437)>, ('30.208.44.238', 49437)) --> 客户端的请求IP及端口信息
¬
接收到来自【30.208.44.238】端口为:49714】的数据信息,内容为:来自28.148的tcp连接消息

使用socket实现简易文件下载
# /usr/bin/python3
# —*— encoding:utf-8 —*—

# 服务端
import socket, os

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('Server_IP', Server_Port))
server_socket.listen(128)
clinet_socket, clinet_addr = server_socket.accept()
data = clinet_socket.recv(1024).decode('utf-8')

if os.path.isfile(data):
    with open(file=data, mode='rb') as file:
        content = file.read()
        clinet_socket.send(content)
else:
    clinet_socket.send('文件【{}】不存在'.format(data).encode('utf8'))

server_socket.close()
# 客户端
import socket

clinet_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
clinet_socket.connect(('Server_IP',Server_Port))
file_name = input('输入文件名:')
clinet_socket.send(file_name.encode('utf-8'))
data = clinet_socket.rev(1024).decode('utf-8')
print(data)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值