我正在尝试将数据发送到我的一台服务器并从它接收一个 ACK。但是,在等待来自服务器的响应时,处理会挂起。我知道存在连接的事实,因为我可以看到到达服务器的数据。我也知道服务器正在正确输出数据,因为我的 C# 客户端正在从服务器接收数据。我会注意到这个客户端运行在 centOS 虚拟机上。服务器是一台远程 Windows 机器。我不会想象由于虚拟环境会出现问题,因为我能够使用 SNMP java 客户端(SNMP4j 包)来调用远程服务器。我相信我的服务器也在输出原始二进制文件,但我希望以任何一种方式看到某种输出。
// A Java program for a Client
import java.net.*;
import java.io.*;
public class Client
{
// initialize socket and input output streams
private Socket socket = null;
private DataInputStream input = null;
private DataOutputStream out = null;
private DataInputStream serveroutput= null;
// constructor to put ip address and port
public Client(String address, int port)
{
// establish a connection
try
{
socket = new Socket(address, port);
System.out.println("Connected");
// takes input from terminal
input = new DataInputStream(System.in);
// sends output to the socket
out = new DataOutputStream(socket.getOutputStream());
serveroutput = new DataInputStream(socket.getInputStream());
}
catch(UnknownHostException u)
{
System.out.println(u);
}
catch(IOException i)
{
System.out.println(i);
}
// string to read message from input
String line = "";
// keep reading until "Over" is input
while (!line.equals("Over"))
{
try
{
line = input.readLine();
out.writeUTF(line);
System.out.println(serveroutput.readLine())
}
catch(IOException i)
{
System.out.println(i);
}
}
// close the connection
try
{
input.close();
out.close();
socket.close();
}
catch(IOException i)
{
System.out.println(i);
}
}
如果您能分享其他代码,那就太好了。(对不起,还不能发表评论)尝试使用其他东西 over writeUTF()
,可能只是 a PrintStream
,正如@marquis-of-lorne 提到的那样,(read|write)UTF
可能会被同行混淆。
此外,这可能是一个很好的做法,flush()
当没有其他东西要发送以确保数据完全发送时,从双方输出输出。
您也可以BufferedReader
在InputDataStream
尝试阅读行时尝试。readLine()
fromInputDataStream
已弃用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句