python socket 服务端 客服端 测试 代码

本文展示了如何使用Python实现TCP套接字的服务器端和客户端。服务器端通过`socket`库监听8888端口,接收客户端连接并进行消息收发。客户端则连接到服务器,发送用户输入的消息并接收服务器响应。提供了详细的代码示例,适用于理解TCP通信的基本流程。
摘要由CSDN通过智能技术生成

服务器端代码

"""
tcp_server.py tcp 套接字服务端流程
重点代码

注意: 功能性代码,注重流程和函数使用
"""

import socket

# 创建tcp套接字
sockfd = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定地址
sockfd.bind(('0.0.0.0', 8888))
# 设置监听
sockfd.listen(5)

while True:

    # 阻塞等待处理连接
    print('waiting for connect....')
    try:
        connfd, addr = sockfd.accept()
        # 打印连接的客户端地址
        print('Connect from', addr)
    except KeyboardInterrupt:
        print('Server exit')
        break
    except Exception as e:
        print(e)
        continue

    while True:
        # 收发消息
        data = connfd.recv(1024)
        if not data:
            break
        print('收到:', data.decode())
        # 发送字节串
        n = connfd.send(b'Thanks:'+data)
        print('发送%d字节' % n)

    # 关闭套接字
    print(connfd, '退出了')
    connfd.close()

sockfd.close()

# 乌班图系统可以用过这个命令访问
# telent 127.0.0.1 8888

客户端代码

"""
tcp_client.py tcp 客户端流程
重点代码
"""

from socket import *

# 创建tcp套接字
sockfd = socket()

# 连接服务器
server_addr = ('127.0.0.1', 8888)
sockfd.connect(server_addr)

while True:
    # 发送消息
    data = input('Msg>>')
    if not data:
        break
    sockfd.send(data.encode())
    data = sockfd.recv(1024)
    print('server:',data.decode())


# 关闭套接字
sockfd.close()


你可以尝试使用以下方法来解决Python Socket服务端不终止的问题: 1. 确保在完成所有操作后关闭Socket连接。你可以使用`socket.close()`方法来关闭连接。确保在适当的位置调用该方法,以确保连接被正确关闭。 2. 使用`try`和`except`语句来捕获异常并终止服务端。在你的代码中一个异常处理块,可以捕获到可能导致服务端无法终止的异常,并在其中终止服务端。 ```python import socket # 创建Socket对象 server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 绑定IP口 server_address = ('localhost', 8888) server_socket.bind(server_address) # 监听连接 server_socket.listen(1) try: while True: # 接受客户连接 client_socket, client_address = server_socket.accept() # 处理客户请求 # ... # 关闭客户连接 client_socket.close() except KeyboardInterrupt: # 捕获Ctrl+C终止信号 print("服务端被终止") finally: # 关闭服务端Socket连接 server_socket.close() ``` 在上面的代码中,使用了`try`和`except`语句来捕获`KeyboardInterrupt`异常(即用户按下Ctrl+C终止程序的信号),在异常处理块中打印一条消息并终止服务端。 3. 使用守护线程(daemon thread)来运行服务端。在创建服务端线程之前,设置线程为守护线程。当主线程终止时,守护线程会自动结束。 ```python import socket import threading def handle_client(client_socket): # 处理客户请求 # ... # 关闭客户连接 client_socket.close() # 创建Socket对象 server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 绑定IP口 server_address = ('localhost', 8888) server_socket.bind(server_address) # 监听连接 server_socket.listen(1) while True: # 接受客户连接 client_socket, client_address = server_socket.accept() # 创建线程处理客户请求 client_thread = threading.Thread(target=handle_client, args=(client_socket,)) # 设置线程为守护线程 client_thread.daemon = True # 启动线程 client_thread.start() ``` 在上面的代码中,创建了一个守护线程`client_thread`来处理每个客户连接。当主线程终止时,守护线程也会随之终止。 这些方法可以帮助你解决Python Socket服务端不终止的问题。根据你的具体情况选择其中一种方法即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值