Python网络编程

目录

1.网络基础

1.1TCP协议

1.2UDP协议

1.3Socket简介

2.TCP编程

2.1TCP客户端示例

2.2TCP服务器示例

3.UDP编程

3.1UDP客户端示例

3.2UDP服务器示例

4.小案例:建议聊天应用

4.1TCP聊天客户端

4.2TCP聊天服务器


1.网络基础

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

1.1TCP协议

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的协议,提供可靠的、按顺序到达的通信服务。TCP协议通过三次握手建立连接,并通过四次挥手断开连接。其主要特点如下:
> 面向连接:TCP需要在数据传输前建立连接。数据传输之前,2发送方和接收方需要通过三次握手来确认连接的可靠性。
> 可靠性:TCP通过序列号、确认应答、重传机制等方式保证数据的可靠传输。如果数据丢失或损坏TCP会自动进行重传。
> 流量控制:TCP通过滑动窗口技术来控制数据传输速率,防止接收方处理不过来数据。
> 有序性:数据包的接收顺序由TCP保证,接收方会按序号将数敢据重新组装
在实际应用中,TCP适合于那些对数据的可靠性和顺序性有严格要求的场景,例如文件传输、电子邮件等。

1.2UDP协议

UDP(UserDatagram Protocol,用户数据报协议)是一种无连接的协议,它的主要特点是简单、快速,
但不保证数据的可靠性和顺序。UDP协议的主要特点如下:
> 无连接:UDP不需要建立连接,因此通信双方无需进行握手。
> 不可靠传输:UDP不提供确认应答机制,也不保证数据到达的顺序,可能会丢包或出现乱序的情况。
> 速度较快:由于不需要建立连接和处理数据传输的复杂性,UDP在传输过程中速度较快,适合用于
实时性要求较高的应用场景。
> 适用于广播和多播:UDP支持广播和多播,可以在网络中同时向多个接收方发送数据UDP适用于那些对实时性要求较高,但不要求数据可靠性保障章的场景,例如在线游戏、视频会议等。

1.3Socket简介

Socket是网络通信的基础,是实现网络编程的抽象层。在Python中,socket模块提供了对Socket的封装,使得我们可以轻松实现TCP和UDP通信。Socket接口提供了发送、接收、连接、断开等操作,允
许我们在程序中实现网络通信。
> IPv4和IPv6:Socket支持IPv4和IPV6协议,通过指定不同的地址族(AF_INET表示IPV4,AF_INET6表示IPV6)可以支持不同的网络环境。
> 协议类型:Python的Socket模块支持两种主要的协议类型:S0CK_STREAM表示TCP协议
SOCK_DGRAM表示UDP协议。

2.TCP编程

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

2.1TCP客户端示例

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.2TCP服务器示例

import socket

def tcp_server():
    #创建一个TCP服务器socket
    server_socket = socket.socket(socket.AF_INET, ssocket.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编程

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

3.1UDP客户端示例

import socket

def udp_client():

    #创建UDP客户端socket
    client_socket = socket.socket(socket.AF_INET, socketSOCK_DGRAM)

    #发送数据
    message = 'Hello, UDP Server'
    client_socket.sendto(message.encode('utf-8'), ('1270.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.2UDP服务器示例

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.小案例:建议聊天应用

我们设计一个简单的TCP聊天应用。客户端和服务器通过TCP协议进行通信,客户端发送消息,服务器接收并返回响应。

4.1TCP聊天客户端

import socket

def tcp_chat_client():
    #创建TCP客户端Socket
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client_socket.connect(('127.0.0.1',12345))#连接服务福

    while True:
        message=input('You:')#从用户输入获取消息
        ifmessage.lower()=="exit':#输入exit退出聊天
            break
        client_socket.send(message.encode('utf-8')) #发送消息
        response=client_socket.recv(1024) # 接收服务器响应
        print('Server:',response.decode('utf-8')) #打印服务器响应

    client_socket.close()

if __name__ ==__'__main__':

    tcp_chat_client()

4.2TCP聊天服务器

import socket

def tcp_chat_server():
    #创建TCP服务器Socket
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.bind(('127.0.0.1',12345))#绑定IP和谐普洱
    server_socket.listen(5)#开始监听
    print('Server is waiting for connection...')
    client_socket, client_address = server_socket.accept()#接受客户端连接
    print(f'Connection established with {client_address}')

    while True:
        #接收客户端消息
        message=client_socket.recv(1024) #接收消息
        if not message:
            break #如果没有接收到消息,则退出

        print('Client:',message.decode('utf-8')) #打印客户满消息
        response=input('You:')#从服务器端输入回应
        client_socket.send(response.encode('utf-8')) #发送回应给客户端

        client_socket.close()#关闭客户端连接
        server_socket.close()#关闭服务器连接

if __name__ == '__main__':

    tcp_chat_server()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值