我有这个问题。 我需要从本地网络连接的秤上读取权重。 从超级终端我连接到带端口的ip,打开连接,我发送字符串“XN”,输入,并且刻度在Hyperterminal写一个新行,权重为字符串。 我试图使用socket的代码做同样的事情,但我可以获得任何结果。 你能告诉我一些帮助我的例子吗?这是我尝试过的代码没有成功。
Socket echoSocket = null;
DataOutputStream os = null;
DataInputStream is = null;
try
{
echoSocket = new Socket(IpBilancia, Porta);
os = new DataOutputStream(echoSocket.getOutputStream());
is = new DataInputStream(echoSocket.getInputStream());
}
catch (UnknownHostException e) {
System.err.println("Don't know about host: " + IpBilancia);
}
catch (IOException e)
{
System.err.println("Couldn't get I/O for the connection to" + IpBilancia);
}
try
{
os.writeBytes("XN");
os.writeByte('\n');
os.flush();
BufferedReader input = new BufferedReader(new InputStreamReader(is));
String Peso;
while ((Peso = input.readLine()) != null)
{
System.out.println("echo: " + is.readLine());
}
os.close();
is.close();
echoSocket.close();
} catch (IOException e) {
System.err.println("I/O failed on the connection to" + IpBilancia);
}
edit1:
Socket echoSocket = null;
DataOutputStream os = null;
DataInputStream is = null;
try
{
echoSocket = new Socket(IpBilancia, Porta);
os = new DataOutputStream(echoSocket.getOutputStream());
is = new DataInputStream(echoSocket.getInputStream());
}
catch (UnknownHostException e) {
System.err.println("Don't know about host: " + IpBilancia);
}
catch (IOException e)
{
System.err.println("Couldn't get I/O for the connection to" + IpBilancia);
}
try
{
os.writeBytes("XN");
os.writeByte('\n');
os.flush();
BufferedReader input = new BufferedReader(new InputStreamReader(is));
String Peso;
while ((Peso = input.readLine()) != null)
{
System.out.println("echo: " + is.readLine());
}
os.close();
is.close();
echoSocket.close();
} catch (IOException e) {
System.err.println("I/O failed on the connection to" + IpBilancia);
}
调试停留在while循环上。它不会进入循环。 它停在这里 while((Peso = input.readLine())!= null) 什么都不做。
答案 0 :(得分:1)
以下代码适用于netcat虚拟服务器(您的代码包含Jesper')
try
{
os.writeBytes("XN");
os.writeByte('\n');
os.flush();
BufferedReader input = new BufferedReader(new InputStreamReader(is));
String peso;
while ((peso = input.readLine()) != null)
{
System.out.println("echo: " + peso);
}
os.close();
is.close();
echoSocket.close();
} catch (IOException e) {
System.err.println("I/O failed on the connection to" + IpBilancia);
}
您使用超级终端手动尝试服务器,因此我认为您的服务器是在Windows上。
也许你的超级终端的配置使用CRLF作为行尾?
在这种情况下,请尝试使用:
os.writeBytes("XN");
os.writeByte('\r');
os.writeByte('\n');
与Java客户端具有相同的EOL。