【发布时间】:2015-06-06 21:02:07
【问题描述】:
我正在尝试通过 telnet 向套接字连接发送和接收字符串数据,但我无法在 telnet 窗口中键入或查看任何内容。我能够通过 telnet 连接到服务器,但无法发送字符串数据。
还有其他替代方法可以通过套接字连接发送字符串数据吗?
【问题讨论】:
标签: string sockets connection telnet
我正在尝试通过 telnet 向套接字连接发送和接收字符串数据,但我无法在 telnet 窗口中键入或查看任何内容。我能够通过 telnet 连接到服务器,但无法发送字符串数据。
还有其他替代方法可以通过套接字连接发送字符串数据吗?
【问题讨论】:
标签: string sockets connection telnet
Telnet,除非它协商相反的参数,否则“远程回显”意味着除非服务器回显,否则您将看不到您键入的任何内容。
很多人使用术语“Telnet”实际上它是一个在连接时不进行配置协商的原始套接字连接。
如果您从键盘以外的文件或源发送数据(甚至经常从键盘发送),您最好使用像 socket 或 nc (netcat) 这样的程序它不会尝试对数据流进行任何处理,因此提供简单的 8 位干净连接。
在这两个问题的情况下,您可以简单地从文件重定向标准输入或通过管道将字符串回显给它们。
【讨论】:
echo '100,,,,42,CREDIT,,0074,074,SALE,' | nc destip destport | cat -v 应该这样做。 nc 和 socket 只是简单的双向管道。 stdin 发送到服务器,服务器发送到 stdout。仅当服务器发送响应时,您才会在终端窗口上看到响应。请注意,如果服务器发送二进制数据,它可能会影响您的终端(为了安全起见,将管道输入cat -v)。注意echo最后也会发送一个LF;添加-n 以阻止它。 nc 也会在 stdin 获得 EOF 后立即关闭连接,因此请确保您的服务器可以正常使用。
cat 不是标准命令。此外,echo 命令不需要引号(将它们放在输出中),并且星号和空格字符可能存在问题。除此之外,是否安装了nc?你能用它来简单地连接(不使用线上的其余东西)吗?
我有一个与许多 telnet 客户端通信的服务器示例。
您必须使用类 DataInputStream 和 DataOutputStream 您必须使用 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
我希望你能用这段代码提供一些东西。
【讨论】:
edit 您的答案,以包含任何缺失/更改的信息。