2015-04-02 1 views
0

Я пытаюсь отправить и получить строковые данные для подключения сокетов через telnet, но я не могу напечатать или увидеть что-либо в окне telnet. Я могу подключиться к серверу через telnet, но не могу отправить строковые данные.Как передать строковые данные в сокет-соединение через telnet или любую другую программу?

Есть ли другой альтернативный способ отправки строковых данных через соединение сокета.

ответ

1

Telnet, если он не согласовывает параметры напротив, делает «удаленное эхо» означающее, что вы не увидите ничего, что вы набираете, если сервер не повторит его.

Многие люди используют термин «Telnet», когда на самом деле это сырое сокетное соединение, которое не поддерживает согласование конфигурации при подключении.

Если вы отправляете данные из файла или другого источника, кроме клавиатуры (и даже часто при отправке с клавиатуры), вам лучше использовать программу как socket или nc (netcat), которые не пытаются выполнять любую обработку потока данных и, таким образом, обеспечивать простые 8-битные чистые соединения.

В случае обеих этих проблем вы можете просто перенаправить stdin из файла или эхо-строку для них через трубу.

+0

Спасибо Брайан. как я могу отправлять строковые данные через netcat. Мне нужно отправить следующую строку (100 ,,,, 42, CREDIT ,, 0074,074, SALE,) на сервер и вернуть ответ. Могу ли я также увидеть ответ в netcat или мне нужно зайти на сервер, чтобы проверить ответ. Можете ли вы сообщить мне, могу ли я сделать это в nc. –

+1

'echo '100 ,,,, 42, CREDIT ,, 0074,074, ПРОДАЖА,' | nc destip destport | cat -v' должен это сделать. 'nc' и' socket' - это просто двунаправленные каналы. Независимо от того, что stdin отправляется на сервер, и все, что отправляет сервер, идет stdout. Вы увидите ответ в окне терминала только в том случае, если сервер отправит его. Помните, что если сервер отправляет двоичные данные, это может повлиять на ваш терминал (труба в 'cat -v' должна быть безопасной). Обратите внимание, что 'echo' также отправит LF в конец; добавьте '-n', чтобы остановить это. 'nc' также закрывает соединение, как только stdin получает EOF, поэтому убедитесь, что ваш сервер в порядке. –

+0

Спасибо Брайан.Я попробовал это и заметил ошибку ниже: -C: \ Users \ adevasun> nc Строка Cmd: echo '100 ,,,, 42, CREDIT ,, 0074,074, ПРОДАЖА ,,, 4012000033330027,1604,, 2724,74 2213 ,,,, * STORESTAN 742213 ,,,,,,,,,, * CVV2_125 ,,, 5007407400221315031831823 ,,,,,,,, ,,,,,,,, 03182015,085023 ,,,,,, ,,,,,,,,,,,,,,,,,,,,,,, '| nc colstcd02.TEST.com 24901 | cat -v echo: поиск вперед хоста не удалось: h_errno 11001: HOST_NOT_FOUND я отправил синтаксис wroong? –

-2

У меня есть пример сервера, который разговаривает со многими клиентами telnet.

Вы должны использовать класс DataInputStream и DataOutputStream Вы должны использовать A Класс Реализует 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 г.) и доставку сессий других потоков получить новые соединения.

Хорошо, ниже приведен код класса Called 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 де Република Доминикана

Я надеюсь, что вы служите что-то этот код.

+0

Я забыл сказать, что для подключения через telnet необходимо сначала включить telnet-инструмент и использовать команду telnet

+0

Вы можете «отредактировать» свой ответ по ссылке выше этого раздела комментариев, чтобы включить любые отсутствует/изменена информация. – Carsten

+0

Кроме того, это довольно старый общий вопрос (без определенного связанного с ним языка программирования), на который вы отвечаете очень определенным образом. Кроме того, ваше решение содержит ненужные комментарии к коду и не-английскому, которые могут смутить. – Carsten