网络编程之Socket

网络编程之Socket

目录

什么是Socket

TCP服务端流程

TCP客户端流程

UDP服务端流程

UDP客户端流程

什么是Socket

Socket是位于应用层与传输层之间的一个抽象层,可用于不同的网络协议(如TCP、UDP等)它允许应用程序创建一个与网络上的其他主机进行通信的端点

TCP服务端流程

  • 服务端流程

    • 首先服务端先创建并初始化Socket
    # 创建Socket
    Socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    
    • 绑定地址和端口:将Socket绑定到本地的IP地址和端口上,这个IP地址就将作为服务器的监听地址
    # 绑定服务器和端口号
    servers_addr = ('127.0.0.1', 8080)
    Socket.bind(servers_addr)
    
    • 监听连接请求:等待客户端的连接请求
    # 监听客户端请求 最大连接数为5
    Socket.listen(5)
    print('服务器启动成功,等待客户端连接...')
    
    while True:
        # 接受数据
        client_socket, client_addr = Socket.accept()
        print('与客户端建立连接', client_addr)
    
    • 数据交换:当连接成功后,便可以和客户端互相发送信息并处理
    # 数据交换
    while True:
        data = Socket.recv(1024)  # 最大1024字节
        if len(data) < 1:
            print('关闭服务')
            break
    
        # 接受客户器端传来的数据
        print(data.decode())
    
        # 向客户端发送数据
        sen = input('')
        Socket.sendall(sen.encode())
    
    • 关闭连接:当通信结束后可以通过关闭Socket来断开连接,并释放资源
    Socket.close()
    print("已关闭连接")
    

TCP客户端流程

  • 客户端流程

    • 创建并初始化Socket
    # 创建Socket
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
    • 连接服务器IP以及端口
    # 服务器地址和端口
    server_address = ('localhost', 8080)
    
    • 连接服务器
    # 连接服务器
    client_socket.connect(server_address)
    print('已连接到服务器:', server_address)
    
    • 连接成功后与服务端交换数据并处理
    while True:
        # 发送数据
        message = input('>>>>')
        client_socket.sendall(message.encode())
    
        # 接收响应
        response = client_socket.recv(1024)
        print('服务器响应:', response.decode())
    
    • 关闭连接
    client_socket.close()
    

UDP服务端流程

UDP 是无连接的协议,因此不需要像 TCP 那样先建立连接再进行通信

import socket

# 创建 Socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 绑定地址和端口
server_address = ('127.0.0.1', 9000)
server_socket.bind(server_address)

print('服务器启动成功,等待客户端数据...')

while True:
    # 接收数据
    data, client_address = server_socket.recvfrom(1024)  # 最大1024字节

    # 处理接收到的数据
    print(f'来自客户端 {client_address} 的消息:', data.decode())

    # 向客户端发送响应
    response = input('请输入要发送给客户端的消息: ')
    server_socket.sendto(response.encode(), client_address)

# server_socket.close()

UDP客户端流程

import socket

# 创建 Socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 服务器地址和端口
server_address = ('127.0.0.1', 9000)

while True:
    # 发送数据
    message = input("请输入要发送给服务器的消息: ")
    client_socket.sendto(message.encode(), server_address)

    # 接收响应
    response, server_address = client_socket.recvfrom(1024)  # 最大1024字节
    print('服务器响应:', response.decode())

# client_socket.close()

你可能感兴趣的:(Study,网络,python)