python网络编程

目录

1:网络基础

1.1:TCP协议

1.2:UDP协议

1.3:socket简介

2:TCP编程

2.1:TCP客户端示例

2.2:TCP服务器示例

3:UDP编程

3.1:UDP客户端示例

3.2:UDP服务器示例

4:小案例:简易聊天应用

4.1:TCP聊天服务器

4.2:TCP聊天客户端


1:网络基础

网络编程是指通过计算机网络进行信息交换与通信的技术。网络通信依赖于网络协议,网络协议规定了数据传输的格式、方法以及数据交互的规则。在计算机网络中,最常见的两种通信协议是 TCP 和 UDP。

1.1:TCP协议

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的协议,提供可靠的、按顺序到达的通信服务。TCP 协议通过三次握手建立连接,并通过四次挥手断开连接。其主要特点如下:

面向连接:通信前需建立连接(三次握手),结束后释放连接(四次挥手)。

可靠传输:通过确认、重传、流量控制和拥塞控制确保数据无差错、不丢失、不重复且有序。

全双工通信:支持双向数据传输。

字节流传输:数据被视为无结构的字节流,无固定边界。

1.2:UDP协议

UDP(User Datagram Protocol,用户数据报协议)是一种无连接的协议,它的主要特点是简单、快速,但不保证数据的可靠性和顺序。UDP 协议的主要特点如下:

无连接:无需建立连接,直接发送数据。

不可靠传输:不保证数据到达、顺序或完整性,无重传机制。

高效:首部开销小(8字节),传输速度快。

面向报文:保留数据边界,每次发送一个完整报文。

1.3:socket简介

  • 定义:Socket是应用层与传输层之间的抽象接口,提供网络通信的编程接口。

  • 作用:实现不同主机或同一主机上的进程间通信。

  • 类型

    • 流式Socket(SOCK_STREAM):基于TCP,可靠、面向连接。

    • 数据报Socket(SOCK_DGRAM):基于UDP,无连接、不可靠。

    • 原始Socket(SOCK_RAW) :直接访问底层协议(如IP、ICMP)。

  • 工作流程(以TCP为例):

    1. 服务端 :创建Socket → 绑定IP和端口(bind)→ 监听(listen)→ 接受连接(accept)。

    2. 客户端 :创建Socket → 连接服务端(connect)。

    3. 数据传输 :双方通过send/recv通信。

    4. 关闭连接 :调用close释放资源。

2:TCP编程

2.1:TCP客户端示例

cpp 复制代码
import socket

def tcp_client():
    # 创建一个TCP客户端socket
    # AF_INET表示IPv4协议,SOCK_STREAM表示TCP协议
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 连接到服务器(IP和端口)
    client_socket.connect(('127.0.0.1', 12345))

    # 发送数据
    message = 'Hello, Server'
    client_socket.send (message.encode ('utf-8')) # 发送数据时需要进行编码

    #接收服务器响应
    response = client_socket.recv (1024) # 接收最多 1024 字节的数据
    print ('Received from server:', response.decode ('utf-8')) # 接收到的数据需要解码

    #关闭连接
    client_socket.close()

if name == 'main':
    tcp_client()

代码解析:

  • socket.socket (socket.AF_INET, socket.SOCK_STREAM):创建一个 TCP 客户端 Socket,使用 IPv4 地址族(AF_INET)和 TCP 协议(SOCK_STREAM)。
  • client_socket.connect (('127.0.0.1', 12345)):通过 IP 地址和端口连接到服务器。
  • client_socket.send ():将数据发送到服务器,数据需要进行编码(encode ('utf-8'))。
  • client_socket.recv ():接收来自服务器的数据,最多接收 1024 字节。
  • client_socket.close ():关闭客户端 Socket 连接。

2.2:TCP服务器示例

cpp 复制代码
import socket

def tcp_server():
    #创建一个 TCP 服务器 socket
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    #绑定服务器地址和端口
    server_socket.bind(('127.0.0.1', 12345))
    
    #开始监听连接,最大连接数为 5
    server_socket.listen(5)
    print('Server is listening...')

    while True:
        #接受客户端连接
        client_socket, client_address = server_socket.accept()
        print(f'Connection from {client_address}')

        #接收客户端消息
        message = client_socket.recv(1024)
        print(f'Received message: {message.decode("utf-8")}')

        #发送响应
        client_socket.send (b'Hello, Client') # 发送响应数据,需要编码成字节形式

        #关闭连接
        client_socket.close()

if name == 'main':
    tcp_server()

代码解析:

  • server_socket.bind (('127.0.0.1', 12345)): 绑定服务器的 IP 地址和端口。
  • server_socket.listen (5): 开始监听连接,最大连接数为 5。
  • server_socket.accept (): 接受客户端连接。
  • client_socket.recv (1024): 接收客户端消息。
  • client_socket.send (b'Hello, Client'): 向客户端发送响应消息。
  • client_socket.close (): 关闭与客户端的连接。

3:UDP编程

3.1:UDP客户端示例

cpp 复制代码
import socket

def udp_client():
    # 创建UDP客户端socket
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    # 发送数据
    message = 'Hello, UDP Server'
    client_socket.sendto(message.encode('utf-8'), ('127.0.0.1', 12345))  # 发送数据并指定目标地址

    # 接收服务器响应
    response, server_address = client_socket.recvfrom(1024)  # 接收数据和服务器地址
    print('Received from server:', response.decode('utf-8'))

    # 关闭socket
    client_socket.close()

if __name__ == '__main__':
    udp_client()

代码解析:

  • socket.socket (socket.AF_INET, socket.SOCK_DGRAM): 创建 UDP 客户端 Socket。
  • client_socket.sendto (): 发送数据到指定的目标地址和端口。
  • client_socket.recvfrom (): 接收来自服务器的响应,返回接收到的数据和服务器地址。

3.2:UDP服务器示例

cpp 复制代码
import socket

def udp_server():
    # 创建UDP服务器socket
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    # 绑定服务器地址和端口
    server_socket.bind(('127.0.0.1', 12345))
    print('Server is listening...')

    while True:
        # 接收客户端消息
        message, client_address = server_socket.recvfrom(1024)  # 接收数据和客户端地址
        print(f'Received message: {message.decode("utf-8")}')

        # 发送响应
        server_socket.sendto(b'Hello, UDP Client', client_address)  # 向客户端发送响应

if __name__ == '__main__':
    udp_server()

代码解析:

  • server_socket.bind (('127.0.0.1', 12345)): 绑定服务器的 IP 地址和端口。
  • server_socket.recvfrom (1024): 接收来自客户端的数据,并返回数据和客户端地址。
  • server_socket.sendto (): 向指定客户端地址发送响应数据。

4:小案例:简易聊天应用

4.1:TCP聊天服务器

101(服务器):

cpp 复制代码
vim server.com
import socket		#导入模块

host='192.168.10.101'		#定义监听内容
port=12345

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#socket.AF_INET网络层协议
#socket.SOCK_STREAM传输层协议
s.bind((host,port))

s.listen(1)

sock,addr=s.accept()

print('建立连接成功')

info=sock.recv(1024).decode()

while info !='bye':
	if info:
		print('收到的信息是:'+info)
		send_data=input('请输入你要发送的信息:')
		send_data=str(send_data)
		sock.send(send_data.encode())
		if send_data=='bye':
			break
	info=sock.recv(1024).decode()
sock.close()
s.close()

#运行server.py
python3 server.py

4.2:TCP聊天客户端

102(客户端):

cpp 复制代码
vim client.py
s=socket.socket()

host='192.168.10.101'		#定义监听内容
port=12345

s.connect((host,port))

print('已经建立连接')

info=''
while info !='bye':
	send_data=input('请输入你要发送的信息:')
	
	send_data=str(send_data)
	s.send(send_data.encode())
	if send_data=='bye':
		break
	info=s.recv(1024).decode()
	print('收到的信息是:'+info)
s.close()

#先运行server.py
python3 server.py
#再运行client.py
python3 client.py
相关推荐
来一杯龙舌兰4 小时前
【Kubernetes】从零搭建K8s集群:虚拟机环境配置全指南(DNS/网络/防火墙/SELinux全解析一站式配置图文教程)
linux·网络·kubernetes
chengbo_eva4 小时前
Eventsource vs Websocket vs Socket.io
网络·websocket·网络协议
海域云赵从友7 小时前
中泰制造企业组网新方案:中-泰企业国际组网专线破解泰国工厂访问国内 OA/ERP 卡顿难题
网络
heart000_19 小时前
如何用 eBPF 实现 Kubernetes 网络可观测性?实战指南
网络·云原生·容器·kubernetes
杰克逊的日记9 小时前
什么是RoCE网络技术
运维·服务器·网络·roce
Jackilina_Stone14 小时前
【网工】华为配置专题进阶篇④
网络·华为·网工
谷雪_65814 小时前
学习华为 ensp 的学习心得体会
网络·学习·华为·网络工程·ensp
zh4men915 小时前
Mac Parallels Desktop Kali 2025 代理设置
服务器·网络·macos·kali·pdesktop
夜空晚星灿烂16 小时前
C# 网络编程-关于HttpClient使用方式(三)
开发语言·网络·c#
yczn12319 小时前
3D可视化数字孪生智能服务平台-物联网智控节能控、管、维一体化技术架构
大数据·网络·人工智能