【发布时间】:2011-09-23 11:52:21
【问题描述】:
我需要在 LAN 中不同设备上的两个程序之间建立连接。即,我的设备 A 应该连接到我的 LAN 中的设备 B:portX。问题是我无法将它们直接连接起来。我要做的是让设备 A 连接到服务器,并让该服务器连接到设备 B。在我的服务器上,我监听端口“portX”,当我获得连接时,我连接到设备 B同一个端口。然后我必须通过服务器将数据从 A 传送到 B,但由于某种原因,设备 B 在从 A 接收数据(命令)时没有做它应该做的事情。
我该怎么做?
这是我一直在尝试的方法:
public class Main {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(8000);
} catch (IOException e) {
System.err.println("Could not listen on port: 8000.");
System.exit(1);
}
Socket clientSocket = null;
try {
clientSocket = serverSocket.accept();
System.err.println("connection accepted");
} catch (IOException e) {
System.err.println("Accept failed.");
System.exit(1);
}
Socket remoteSocket = null;
try {
remoteSocket = new Socket("192.168.1.74", 8000);
} catch (Exception e) {
System.out.println("Failed to connect to device B");
}
PrintWriter remoteOut = new PrintWriter(remoteSocket.getOutputStream(),
true);
BufferedReader remoteIn = new BufferedReader(new InputStreamReader(
remoteSocket.getInputStream()));
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(
clientSocket.getInputStream()));
String inputLine;
System.out.println("Hi, we are before the while");
int inputChar = 0;
while ((inputChar = in.read()) >= 0) {
remoteOut.println(inputChar);
System.out.println(inputChar);
}
System.out.println("We are after the while");
out.close();
in.close();
remoteIn.close();
remoteOut.close();
clientSocket.close();
serverSocket.close();
remoteSocket.close();
}
}
提前致谢, 蒂莫菲
【问题讨论】:
-
您是否尝试过让“服务器”直接为“B”运行代码以确认问题出在管道中?如果不是,那么这方面只会使问题变得模糊,您最好将其从您的问题中删除。
-
另外,你说B“没有做它应该做的事”。这意味着什么? 做什么 B做什么?
-
等等...你为什么要让相同的代码充当客户端、服务器和代理?拥有三个不同的程序,这只是令人困惑的事情。
-
问题是A和B中的代码不是我的,我也没有源代码。我知道这听起来像什么,但一切都是严格合法的;) B 应该采取一些措施来响应通过该套接字发送的内容,例如,如果 A 说“闪烁绿灯”,B 应该闪烁其绿灯。现在它根本没有做任何事情。同样,正如我所说,当 A 直接连接到 B 时,B “服从”。 “A”实际上是一个程序,它在“服务器”或我网络中的任何其他计算机上运行时都可以工作。我想做的和“中间人”的事情很像,只是我自己做的网
-
Mark Peters 的“等等...为什么”——它们是三个不同的程序。 A 和 B 不是我的,我只是想写服务器部分。