Windows 下面免费的TCP proxy

               

问题:我需要一个TCP proxy,把发往8080端口的TCP请求,转到89端口上。这样,我一个TCP端口上的服务,可以用两个端口对外提供服务。


解决办法:下载rinetd for Windows版本,创建C:\etc\rinetd.conf配置文件,里面写上

192.168.100.110 8080  192.168.100.110 89


命令行下面启动rinetd


免费开源软件下载:

http://www.boutell.com/rinetd/

           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt中可以使用QTcpServer和QTcpSocket实现TCP代理,具体步骤如下: 1. 创建一个QTcpServer实例并监听指定端口。 2. 当有客户端连接时,创建一个QTcpSocket实例并连接到目标服务器。 3. 将QTcpServer的newConnection()信号与槽函数连接,当有新的客户端连接时,获取客户端的QTcpSocket实例,并将其与目标服务器的QTcpSocket实例进行数据传输。 4. 在数据传输的过程中,需要分别处理客户端和目标服务器的QTcpSocket实例的readyRead()信号,以及对应的槽函数。 5. 在数据传输结束后,需要关闭和释放所有的QTcpServer和QTcpSocket实例。 下面是一个简单的TCP代理的示例代码: ``` #include <QTcpServer> #include <QTcpSocket> class TcpProxy : public QTcpServer { Q_OBJECT public: TcpProxy(QObject *parent = nullptr) : QTcpServer(parent) {} protected: void incomingConnection(qintptr socketDescriptor) override { QTcpSocket *clientSocket = new QTcpSocket(this); clientSocket->setSocketDescriptor(socketDescriptor); QTcpSocket *serverSocket = new QTcpSocket(this); serverSocket->connectToHost("target_host", target_port); connect(clientSocket, SIGNAL(readyRead()), this, SLOT(onClientReadyRead())); connect(serverSocket, SIGNAL(readyRead()), this, SLOT(onServerReadyRead())); connect(clientSocket, SIGNAL(disconnected()), this, SLOT(onClientDisconnected())); connect(serverSocket, SIGNAL(disconnected()), this, SLOT(onServerDisconnected())); m_clientSockets.insert(clientSocket, serverSocket); m_serverSockets.insert(serverSocket, clientSocket); } private slots: void onClientReadyRead() { QTcpSocket *clientSocket = qobject_cast<QTcpSocket *>(sender()); QTcpSocket *serverSocket = m_clientSockets.value(clientSocket); QByteArray data = clientSocket->readAll(); serverSocket->write(data); } void onServerReadyRead() { QTcpSocket *serverSocket = qobject_cast<QTcpSocket *>(sender()); QTcpSocket *clientSocket = m_serverSockets.value(serverSocket); QByteArray data = serverSocket->readAll(); clientSocket->write(data); } void onClientDisconnected() { QTcpSocket *clientSocket = qobject_cast<QTcpSocket *>(sender()); QTcpSocket *serverSocket = m_clientSockets.value(clientSocket); m_clientSockets.remove(clientSocket); m_serverSockets.remove(serverSocket); clientSocket->deleteLater(); serverSocket->deleteLater(); } void onServerDisconnected() { QTcpSocket *serverSocket = qobject_cast<QTcpSocket *>(sender()); QTcpSocket *clientSocket = m_serverSockets.value(serverSocket); m_serverSockets.remove(serverSocket); m_clientSockets.remove(clientSocket); serverSocket->deleteLater(); clientSocket->deleteLater(); } private: QMap<QTcpSocket *, QTcpSocket *> m_clientSockets; QMap<QTcpSocket *, QTcpSocket *> m_serverSockets; }; ``` 在上述代码中,QTcpServer的incomingConnection()函数会在有新的客户端连接时被调用。在该函数中,我们创建了客户端的QTcpSocket实例和目标服务器的QTcpSocket实例,并将其连接起来,同时将两个QTcpSocket实例的readyRead()信号与对应的槽函数相连接。此外,我们还需要处理QTcpSocket实例的disconnected()信号。 注意:上述示例代码中的target_host和target_port需要根据实际情况进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值