tcp 服务端(用于测试)

在tcp客户端连接后,可持续接收客户端发送的信息。

复制代码
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import socket

HOST = '0.0.0.0'
PORT = 8880

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server_socket.bind((HOST, PORT))
server_socket.listen(5)
print '[*] 服务器已启动 (长连接模式),正在监听 %s:%s' % (HOST, PORT)
print '[*] 客户端连接后可发送多条消息,输入 "quit" 或 "exit" 断开连接'

while True:
    # 等待新客户端连接
    client_conn, client_addr = server_socket.accept()
    print '\n[+] 接收到来自 %s:%s 的新连接,进入对话模式' % (client_addr[0], client_addr[1])
    
    try:
        # 保持与当前客户端的连接,循环接收消息
        while True:
            # 接收数据
            data = client_conn.recv(1024)
            
            if not data:
                # 客户端正常关闭连接(发送了空数据)
                print '[-] 客户端 %s:%s 已主动断开连接' % (client_addr[0], client_addr[1])
                break
                
            # 解码数据(Python 2中recv返回的是字符串)
            message = data.strip()
            print '[%s:%s] 收到: %s' % (client_addr[0], client_addr[1], message)
            
            # 检查是否为退出指令
            if message.lower() in ('quit', 'exit', 'bye'):
                response = 'Goodbye! Connection will be closed.\n'
                client_conn.sendall(response)
                print '[-] 客户端请求退出,断开与 %s:%s 的连接' % (client_addr[0], client_addr[1])
                break
                
            # 处理业务逻辑(这里示例:将消息转为大写并返回)
            # 你可以在这里替换成你的实际处理逻辑
            processed_message = message.upper()
            response = 'Server processed: %s\n' % processed_message
            
            # 发送响应
            client_conn.sendall(response)
            print '[ ] 已发送响应: %s' % response.strip()
            
    except socket.error as e:
        # 客户端异常断开(如网络故障)
        print '[!] 与 %s:%s 的连接异常: %s' % (client_addr[0], client_addr[1], str(e))
        
    finally:
        # 确保连接被关闭
        client_conn.close()
        print '[ ] 连接 %s:%s 已清理\n' % (client_addr[0], client_addr[1])

如果提示:

bash 复制代码
[zhao@ tcpServeringTest]$ python tcpServer.py 
Traceback (most recent call last):
  File "tcpServer.py", line 10, in <module>
    server_socket.bind((HOST, PORT))
  File "/usr/lib64/python2.7/socket.py", line 224, in meth
    return getattr(self._sock,name)(*args)
socket.error: [Errno 98] Address already in use
[zhao@ tcpServeringTest]$ 

那些按如下执行,终止之前的tcp服务

bash 复制代码
[zhao@ tcpServeringTest]$ 
[zhao@hljcors tcpServeringTest]$ sudo netstat -tlnp | grep :8880
tcp        0      0 0.0.0.0:8880            0.0.0.0:*               LISTEN      3658/python         
[zhao@ tcpServeringTest]$ 
[zhao@ tcpServeringTest]$ 
[zhao@tcpServeringTest]$ sudo kill -9  3658
[1]+  Killed                  python tcpServer.py
[zhao@ tcpServeringTest]$
相关推荐
SmartRadio2 小时前
LLCC68 L型与π型匹配网络的调试方法
网络·lora·阻抗匹配·匹配·射频·llcc68
噎住佩奇2 小时前
PVC和PV等概念解释
linux·运维·服务器
资深web全栈开发2 小时前
QUIC 协议:为什么谷歌要用 UDP 重做一遍 TCP?
网络协议·tcp/ip·udp
橙露2 小时前
工业控制嵌入式开发:Modbus 协议在 STM32 中的实现与调试
服务器·网络·stm32
jiecy2 小时前
基础问题:1.1.1.2/24 和 1.1.1.2/22 是同一个 IP 吗?
网络·网络协议·tcp/ip
孟无岐2 小时前
【Laya】HttpRequest 网络请求
网络·typescript·游戏引擎·游戏程序·laya
云雾J视界2 小时前
AI服务器供电革命:为何交错并联Buck成为算力时代的必然选择
服务器·人工智能·nvidia·算力·buck·dgx·交错并联
ELI_He9992 小时前
gpg使用记录
linux·运维·服务器
游戏开发爱好者82 小时前
iPhone 网络调试的过程,请求是否发出,是否经过系统代理,app 绕过代理获取数据
android·网络·ios·小程序·uni-app·iphone·webview