当前位置: 首页 > news >正文

python网络编程

目录

一,网络基础

1,TCP协议

2,UDP协议

3,Socket简介

二,TCP编程

1,tcp客户端示例

2,tcp服务器示例

三,UDP编程

1,UDP客户端示例

 2,UDP服务器示例

4,案例


一,网络基础

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

1,TCP协议

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

面向连接:TCP需要在数据传输前建立连接。数据传输之前,发送方和接收方需要通过三次握手来确认连接的可靠性。
可靠性:TCP通过序列号、确认应答、重传机制等方式保证数据的可靠传输。如果数据丢失或损坏,TCP 会自动进行重传。
流量控制:
TCP通过滑动窗口技术来控制数据传输速率,防止接收方处理不过来数据
 
有序性:数据包的接收顺序由TCP保证,接收方会按序号将数据重新组装。

在实际应用中,TCP适合于那些对数据的可靠性和顺序性有严格要求的场景,例如文件传输、电子邮件等

2,UDP协议

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

无连接:UDP不需要建立连接,因此通信双方无需进行握手。
不可靠传输:
UDP不提供确认应答机制,也不保证数据到达的顺序,可能会丢包或出现乱序的情况。
速度较快:由于不需要建立连接和处理数据传输的复杂性,UDP在传输过程中速度较快,适合用于实时性要求较高的应用场景。
适用于广播和多播:UDP支持广播和多播,可以在网络中同时向多个接收方发送数据。

UDP适用于那些对实时性要求较高,但不要求数据可靠性保障的场景,例如在线游戏、视频会议等。

3,Socket简介

Socket 是网络通信的基础,是实现网络编程的抽象层。在 Python 中,socket 模块提供了对 Socket 的封装,使得我们可以轻松实现 TCP 和 UDP 通信。Socket 接口提供了发送、接收、连接、断开等操作,允许我们在程序中实现网络通信。

IPv4和IPv6:Socket 支持IPv4和 IPv6 协议,通过指定不同的地址族(AF INET 表示 IPv4,AF INET6表示IPv6)可以支持不同的网络环境。
协议类型:
Python的Socket模块支持两种主要的协议类型:SOCKSTREAM表示TCP协议,SOCK DGRAM 表示 UDP 协议。

二,TCP编程

在 TCP 编程中,客户端和服务器之间的通信需要经过连接的建立和断开。以下是基于 Python 实现 TCP 客户端和服务器的示例。

1,tcp客户端示例

import socket
def tcp client():client socket=socket.socket(socket.AF INET, Socket.SOCK STREAM)message ='Hello,Server'client_socket.send(message.encode('utf-8'))response=client socket.recv(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地址族(AFINET)和TCP协议(SOCKSTREAM)。
client_socket.connect(('127.0.0.1',12345)):通过IP地址和端口连接到服务器
 client_socket.send():
 
将数据发送到服务器,数据需要进行编码(encode('utf-8'))。
client_socket.recv():接收来自服务器的数据,最多接收1024字节。
client_socket.close():关闭客户端Socket 连接。

2,tcp服务器示例

import socket
def tcp_server():server socket = socket.socket(socket.AF INET, socket.SOCK STREAM)server socket.bind(('127.0.0.1',12345))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()
ifname__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():关闭与客户端的连接。

三,UDP编程

UDP 编程与 TCP编程的最大区别在于UDP不需要建立连接,客户端和服务器直接发送和接收数据

1,UDP客户端示例

import socket
def udp client():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'))client socket.close()
if__name__=='__main__':udp_client()
socket.socket(socket.AF INET,socket.SOCK DGRAM):创建 UDP 客户端 Socket.
client_socket.sendto():发送数据到指定的目标地址和端口。
client_socket.recvfrom():接收来自服务器的响应,返回接收到的数据和服务器地址。

 2,UDP服务器示例

 

import socketserver 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,案例

第一台

import sockethost='192.168.10.101'
port=12345s=socket.socket(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':breakinfo=sock.recv(1024).decode()sock.close()
s.close()

第二台

import socket
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':breakinfo=s.recv('1024').decode()print('接受到的信息是:'+info)
s.close()

相关文章:

  • 三色标记法 判断有向图是否有环
  • Leetcode 3562. Maximum Profit from Trading Stocks with Discounts
  • CAD精简多段线顶点、优化、删除多余、重复顶点——CAD c#二次开发
  • 厚铜PCB线路板厂会如何处理质量问题?
  • 滑动窗口算法实时计算QPS:Java实现与原理分析
  • MAR:无需量化的掩码自回归图像生成模型
  • RuoYi前后端分离框架集成UEditorPlus富文本编辑器
  • 嵌入式学习(基本操作)day1
  • 在麒麟系统(Kylin OS)上安装`geckodriver`
  • 认识微服务
  • DNS 详情 新增 DNS 自适应服务器 ip
  • 【部署】在离线服务器的docker容器下升级dify-import程序
  • leetcode 3559. Number of Ways to Assign Edge Weights II
  • 【Hive基础】01.数据模型、存储格式、排序方式
  • 内网映射有什么作用,如何实现内网的网络地址映射到公网连接?
  • 【图像处理基石】什么是色彩模式?
  • 倚光科技在二元衍射面加工技术上的革新:引领光学元件制造新方向​
  • 佰力博科技与您探讨铁电分析仪具有哪些测试功能
  • 游戏引擎学习第313天:回到 Z 层级的工作
  • 聊天室H5实时群聊聊天室全开源系统(源码下载)
  • 静态网站可以做留言板/百度下载老版本
  • 网站建设网站需要什么/关键词搜索推广
  • 江苏建设信息官网网站/seo营销是什么意思
  • 建设银行黄陂支行网站/软文推广页面
  • 网站建设优化兼职在家/关键词推广效果分析
  • 做淘宝图的素材搜索网站/找代写文章写手