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]$
相关推荐
xiaoye-duck29 分钟前
《Linux 网络编程》深入理解 IO 多路复用:select 函数详解与 Echo 服务实战
linux·网络
SDWAN_Cheap1 小时前
TCP滑动窗口与拥塞控制是什么?从流量控制到网络稳定性的完整解析
网络·tcp/ip·php
极光通讯1 小时前
呆滞库存回收定价逻辑:如何评估DDR4内存和SATA SSD的回收价值
服务器·ssd
技术人生0011 小时前
VMware Workstation 安装 Ubuntu 24.04 LTS 完整教程
运维·服务器·ubuntu
广东融科数据服务有限公司1 小时前
无网络仓储库房安防监控改造落地案例|离线闭环存储 + 4G 低功耗远程适配实战优化
网络·仓储改造
YumiProxy1 小时前
动态IP冲突排查实战:从ARP检测到DHCP地址池的完整链路
服务器·网络·网络协议·tcp/ip·ip
Dynadot_tech1 小时前
域名投资中的域名管理策略
网络·域名·域名注册·dynadot·域名管理
ai小陈2 小时前
GPU服务器租用容器实战:Docker数据卷持久化与安全重建
服务器·人工智能·安全·docker·ai·gpu算力
CHENKONG_CK2 小时前
RFID 赋能汽车零部件涂装产线,构建全流程数字化追溯体系
网络·人工智能·单片机·网络协议·tcp/ip·汽车
ai小陈2 小时前
深度学习CUDA OOM排查:显存占用与碎片问题实战
服务器·人工智能·python·深度学习·ai·gpu算力