python网络编程

发布于:2025-05-30 ⋅ 阅读:(14) ⋅ 点赞:(0)

一、理论
网络编程是指通过计算机网络进行信息交换与通信的技术。网络通信依赖于网络协议,网络协议规定了数据传输的格式、方法以及数据交互的规则。常见的通信协议是tcp和udp。

TCP(transmission control protocol,传输控制协议)
    面向连接
    可靠
    按序到达

    三次握手建立连接、四次挥手断开连接。

UDP(User Datagram Protocol,用户数据报协议)
    无连接
    简单
    快速

    
socket是网络通信的基础,是实现网络编程的抽象层。位于tcp模型中传输层和应用层之间。在osi模型中属于会话层。

二、实践

tcp服务器和客户端
服务器 101
[root@localhost ~]# vim b.py
import socket

def tcp_server():
    server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    
    server_socket.bind(('192.168.10.101',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()
        
if __name__=='__main__':
    tcp_server()

客户端 102
[root@localhost ~]# vi c.py
import socket

def tcp_client():
    # AF_INET表示ipv4协议,SOCK_STREAM表示TCP协议
    client_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

    client_socket.connect(('192.168.10.101',12345))

    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()

101
[root@localhost ~]# firewall-cmd --add-port=12345/tcp
success
[root@localhost ~]# python3 b.py 
server is listening...
connection from ('192.168.10.102', 59848)
Received message: Hello,Server
connection from ('192.168.10.102', 55464)
Received message: Hello,Server

102
[root@localhost ~]# python3 c.py 
Received from server: Hello,Client
[root@localhost ~]# python3 c.py 
Received from server: Hello,Client


UDP客户端与服务端
101服务端
import socket

def udp_server():
    server_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    
    server_socket.bind(('192.168.10.101',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()

102客户端
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'),('192.168.10.101',12345))

    response,server_address=client_socket.recvfrom(1024)
    print('Received from server:',response.decode('utf-8'))

    client_socket.close()

if __name__=='__main__':
    udp_client()


102
[root@localhost ~]# python3 aa.py 
Received from server: Hello,UDP Client

101
[root@localhost ~]# python3 aa.py 
Server is listening...
Received message: Hello,UDP Server

TCP简易聊天
客户端
import socket

def tcp_chat_client():
    client_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    client_socket.connect(('192.168.10.101',12345))

    while True:
        message=input('you:')
        if message.lower() == '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()


服务端

import socket

def tcp_chat_server():
    server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    server_socket.bind(('192.168.10.101',12345))
    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()


101
[root@localhost ~]# python3 bb.py 
server is waiting for connection...


102
[root@localhost ~]# python3 bb.py 
you:

102
[root@localhost ~]# python3 bb.py 
you:1
server: 2
you:3
server: 4
you:5
server: exit
you:exit


101
[root@localhost ~]# python3 bb.py 
server is waiting for connection...
Connection established with ('192.168.10.102', 42506)
Client: 1
you:2
Client: 3
you:4
Client: 5
you:exit


网站公告

今日签到

点亮在社区的每一天
去签到