【问题标题】:How to send string data to socket connection via telnet or any other program?如何通过 telnet 或任何其他程序将字符串数据发送到套接字连接?
【发布时间】:2015-06-06 21:02:07
【问题描述】:

我正在尝试通过 telnet 向套接字连接发送和接收字符串数据,但我无法在 telnet 窗口中键入或查看任何内容。我能够通过 telnet 连接到服务器,但无法发送字符串数据。

还有其他替代方法可以通过套接字连接发送字符串数据吗?

【问题讨论】:

    标签: string sockets connection telnet


    【解决方案1】:

    Telnet,除非它协商相反的参数,否则“远程回显”意味着除非服务器回显,否则您将看不到您键入的任何内容。

    很多人使用术语“Telnet”实际上它是一个在连接时不进行配置协商的原始套接字连接。

    如果您从键盘以外的文件或源发送数据(甚至经常从键盘发送),您最好使用像 socketnc (netcat) 这样的程序它不会尝试对数据流进行任何处理,因此提供简单的 8 位干净连接。

    在这两个问题的情况下,您可以简单地从文件重定向标准输入或通过管道将字符串回显给它们。

    【讨论】:

    • 谢谢布赖恩。如何通过 netcat 发送字符串数据。我需要将以下字符串 (100,,,,42,CREDIT,,0074,074,SALE,) 发送到服务器并返回响应。我是否也可以在 netcat 中看到响应,或者我是否必须登录服务器才能检查响应。你能告诉我我是否可以在 nc 中做到这一点。
    • echo '100,,,,42,CREDIT,,0074,074,SALE,' | nc destip destport | cat -v 应该这样做。 ncsocket 只是简单的双向管道。 stdin 发送到服务器,服务器发送到 stdout。仅当服务器发送响应时,您才会在终端窗口上看到响应。请注意,如果服务器发送二进制数据,它可能会影响您的终端(为了安全起见,将管道输入cat -v)。注意echo最后也会发送一个LF;添加-n 以阻止它。 nc 也会在 stdin 获得 EOF 后立即关闭连接,因此请确保您的服务器可以正常使用。
    • 谢谢布赖恩。我试了一下,发现下面的错误 -C:\Users\adevasun>nc Cmd line: echo '100,,,,42,CREDIT,,0074,074,SALE,,,4012000033330027,1604,,2724,74 2213, ,,,*STORESTAN 742213,,,,,,,,,,*CVV2_125,,,5007407400221315031831823,,,,,,,,, ,,,,,,,,03182015,085023,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,' | nc colstcd02.TEST.com 24901 | cat -v echo: forward host lookup failed: h_errno 11001: HOST_NOT_FOUND 我发送的语法错误吗?
    • 啊,好吧,DOS 需要不同的命令语法。一方面,cat 不是标准命令。此外,echo 命令不需要引号(将它们放在输出中),并且星号和空格字符可能存在问题。除此之外,是否安装了nc?你能用它来简单地连接(不使用线上的其余东西)吗?
    • 感谢您的回复。是的,我安装了 NC,我在 Windows 7 机器上从 cmd 提示符运行它。我可以通过 NC 连接到远程主机和端口。有没有其他替代方法可以通过 TCP 将字符串请求发送到远程主机?
    【解决方案2】:

    我有一个与许多 telnet 客户端通信的服务器示例。

    您必须使用类 DataInputStreamDataOutputStream 您必须使用 A Class 实现 Runnable 来建立多个会话 您必须使用 ServerSocket 类。

    好的,这是名为 SocketServerExample 的主类的代码:

    import java.net.*;
    import java.io.*;
    import socketserverexample.ThreadServer;
    
     /**
     *
     * @author JuanLuisHiciano
     */
    public class SocketServerExample {
    
    public static void main(String args[]) throws InterruptedException {
    
        ServerSocket mi_servicio = null;
        String linea_recibida;
        DataInputStream entrada = null;
        DataOutputStream salida = null;
        Socket socket_conectado = null;
    
        try {
            mi_servicio = new ServerSocket(2017);
        }
        catch (IOException excepcion) {
            System.out.println(excepcion);
        }
        try {
    
            int n=1;
            while(n<2){
                socket_conectado = mi_servicio.accept();
                System.out.println("Un cliente se a conectado "+socket_conectado.getPort());
                entrada= new DataInputStream(socket_conectado.getInputStream());
                String nombre = entrada.readUTF();
                // Se instancia una clase para atender al cliente y se lanza en
                // un hilo aparte.
                Runnable nuevoCliente = new ThreadServer(nombre, socket_conectado); //Input and Output data Channels 
    
                Thread hilo = new Thread(nuevoCliente);
                hilo.start();      
    
            }
    
            salida.writeUTF("Fin de la conexion....");
    
    
            salida.close();
            entrada.close();
            socket_conectado.close();
        }
        catch (IOException excepcion) {
            System.out.println(excepcion);
        }
    }
    
    }
    

    好的,这将使用 UTP 端口 (2017) 运行主服务器并将会话传递给其他线程以接收新连接。

    好的,下面是ThreadServer类的代码:

    import java.net.*;
    import java.io.*;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    /**
     *
     * @author JuanLuisHiciano
     */
     public class ThreadServer implements Runnable{
    
    DataInputStream entrada;
    DataOutputStream salida;
    Socket socket_conectado = null;
    String linea_recibida;
    String cliente;
    
     ThreadServer(String cliente,Socket socket) {
        socket_conectado = socket;
        this.cliente=cliente;
    
    }
    
    
    
    
    
    @Override
    public void run() {
        int n=0;
       while(n<3){
           try {
                salida = new DataOutputStream(socket_conectado.getOutputStream());
                entrada = new DataInputStream(socket_conectado.getInputStream());
                //System.out.println("Confirmando Conexion al cliente .....");
                salida.writeUTF("Conexion Exitosa\n");
                salida.writeUTF("Puede compartir un mensaje : ");
                //recepcion de mensaje
                linea_recibida = entrada.readUTF();
                System.out.println(cliente+" dice: "+linea_recibida); 
                System.out.println(socket_conectado.getPort());
                n++;
           } catch (IOException ex) {
               Logger.getLogger(ThreadServer.class.getName()).log(Level.SEVERE, null, ex);
           }
    
    
       }
    }
    
    }
    

    使用此代码,您可以与每个正在连接的客户端交谈。

    再见Saludos de Republica Dominicana

    我希望你能用这段代码提供一些东西。

    【讨论】:

    • 我忘了说通过telnet连接必须先启用telnet工具并使用telnet命令
    • 您可以通过此评论部分上方的链接edit 您的答案,以包含任何缺失/更改的信息。
    • 此外,这是一个相当古老的一般问题(没有与之关联的指定编程语言),您正在以非常具体的方式回答。此外,您的解决方案包含可能造成混淆的不必要代码和非英语 cmets。
    • 这是真的,我不太明白,我是 StackOverflow 的新手
    • Carsten,他们是 cmets,你不需要了解他们。你最好理解代码。
    猜你喜欢
    • 1970-01-01
    • 2020-08-16
    • 1970-01-01
    • 2010-12-30
    • 2020-08-29
    • 1970-01-01
    • 2014-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多