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]$
相关推荐
较劲男子汉1 小时前
CANN Runtime零拷贝传输技术源码实战 彻底打通Host与Device的数据传输壁垒
运维·服务器·数据库·cann
wypywyp2 小时前
8. ubuntu 虚拟机 linux 服务器 TCP/IP 概念辨析
linux·服务器·ubuntu
Doro再努力2 小时前
【Linux操作系统10】Makefile深度解析:从依赖推导到有效编译
android·linux·运维·服务器·编辑器·vim
senijusene2 小时前
Linux软件编程:IO编程,标准IO(1)
linux·运维·服务器
不像程序员的程序媛2 小时前
Nginx日志切分
服务器·前端·nginx
忧郁的橙子.2 小时前
02-本地部署Ollama、Python
linux·运维·服务器
chian-ocean2 小时前
深入 CANN:使用 `tbe-op` 构建自定义高性能算子
网络
醇氧2 小时前
【linux】查看发行版信息
linux·运维·服务器
中议视控2 小时前
可编程网络中央控制系统主机通过红外发射棒控制空调电视等红外设备
网络·物联网·5g
XiaoFan0123 小时前
免密批量抓取日志并集中输出
java·linux·服务器