不使用Java通过TCP/IP发送带有固定头的XML命令
我是Java新手(基本上必须在这个项目中动态学习),但我正在尝试向服务器发送一个XML命令,从中获取一些数据。为此,我编写了一个Java程序,并从命令行运行它 以下是我的Java代码供参考。我从客户机/服务器TCP教程中获得了大部分信息,并相应地调整了IP、端口和传出消息。再说一次,我对这个很陌生,所以非常感谢您的帮助不使用Java通过TCP/IP发送带有固定头的XML命令,java,xml,sockets,tcp,Java,Xml,Sockets,Tcp,我是Java新手(基本上必须在这个项目中动态学习),但我正在尝试向服务器发送一个XML命令,从中获取一些数据。为此,我编写了一个Java程序,并从命令行运行它 以下是我的Java代码供参考。我从客户机/服务器TCP教程中获得了大部分信息,并相应地调整了IP、端口和传出消息。再说一次,我对这个很陌生,所以非常感谢您的帮助 import java.io.IOException; import java.io.DataOutputStream; import java.io.DataInputStre
import java.io.IOException;
import java.io.DataOutputStream;
import java.io.DataInputStream;
import java.io.BufferedInputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.nio.charset.StandardCharsets;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
public class GDC {
public static void main(String[] args) throws UnknownHostException, IOException, ClassNotFoundException, InterruptedException {
System.out.println("Attempting connection to GE Reuter Stokes");
// establish the socket connection to the server
// using the local IP address, if server is running on some other IP, use that
Socket socket = new Socket(<SERVER_IP>, <SERVER_PORT>);
System.out.println("Socket Connected");
// write to socket using OutputStream
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
// Initializing request content
byte[] request = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?><command version=\"2.2\" cmd=\"HEARTBEAT\"/>".getBytes(StandardCharsets.UTF_8);
// DataOutputStream.writeInt() writes in big endian and
// DataInputStream.readInt() reads in big endian.
// using a ByteBuffer to handle little endian instead.
byte[] header = new byte[5];
ByteBuffer buf = ByteBuffer.wrap(header, 1, 4);
buf.order(ByteOrder.LITTLE_ENDIAN);
// Initializing request header
header[0] = (byte) 0x060E2B34;
header[1] = (byte) 0x02050101;
header[2] = (byte) 0x0F150111;
header[3] = (byte) 0x00000000;
buf.putInt(request.length);
System.out.println("Sending request to Socket Server");
// Sending request
dos.write(header);
dos.write(request);
dos.flush();
System.out.println("Request was sent. Awaiting response.");
// read from socket using InputStream
DataInputStream dis = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
// Read response header
dis.readFully(header);
buf.flip();
// Read response content
byte[] response = new byte[buf.getInt()];
dis.readFully(response);
// convert the content into a string
String message = new String(response, StandardCharsets.UTF_8);
System.out.println("Message: " + message);
// close your resources
dis.close();
dos.close();
socket.close();
Thread.sleep(100);
}
}
Attempting connection to GE Reuter Stokes
Socket Connected
Sending request to Socket Server
Request was sent. Awaiting response.
Exception in thread "main" java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:210)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:286)
at java.io.BufferedInputStream.read(BufferedInputStream.java:345)
at java.io.DataInputStream.readFully(DataInputStream.java:195)
at java.io.DataInputStream.readFully(DataInputStream.java:169)
at GDC.main(GDC.java:54)