gpt4 book ai didi

Java套接字连接

转载 作者:行者123 更新时间:2023-12-01 14:50:23 25 4
gpt4 key购买 nike

我有一个目标机器(*基于nix)连接到我的机器(我的电脑本地)。我想在这个目标上执行一些命令。

因此,我使用 Java 套接字来实现相同的目的。

socket = new Socket("100.200.400.300", 23, null, 0 );
remote local

这里,在上面的行之后 -

socket.isConnected() returns true.

现在,我已经有了这个 Socket 对象的 I/O 流,并且我正在做 -

while((string = bufferedReader.readLine()) != null) {
outputStream.write(string .getBytes());
outputStream.flush(); }

缓冲读取器从本地文件读取命令并写入套接字对象以在目标计算机上执行。下面的代码从 Socket 读取 -

while((myIntVar = is.read()) != -1) {
//Below line prints some junk data ... hash, updaward arrow and spaces and then
// loop hangs to raise a Socket I/O exception.
System.out.println((char) i);
stringBuffer.append((char) i);}

在这里,我的理解是,由于我已经建立了套接字连接,我可以传递我的命令,这些命令应该在另一端执行(如果错误请纠正我)。

但这不起作用。正如我上面提到的,我收到了垃圾字符,还有一件事 - 我没有传递用于建立套接字连接的用户名和密码 - 我是否必须像我们为 telnet 所做的那样传递它(如何... ?我在这里迷路了)。

并且,仅供引用 - 上面的代码是我的全部代码(没有其他各种线程中提到的服务器或客户端代码)。

最佳答案

Telnet 并不像您那样使用原始套接字。 Telnet 有特殊的结束线路和结束消息的方式。您需要找出要使用的正确协议(protocol),实际上 telnet 有几种不同的实现。使用库可能会更容易。

一个简单的解决方法是过滤任何不属于我们想要的正确 ascii 范围的字符。

private static String cleanMessage(String in) {
StringBuilder sb = new StringBuilder();
for (Character i : in.toCharArray()) {
int charInt = i.hashCode();
if (charInt >= 32 && charInt <= 126) {
sb.append(i);
}
}
return sb.toString();
}

Apache Commons库有一个 Telnet 处理的实现,例如 here

关于Java套接字连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14934602/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com