Java 套接字 - 从客户端向服务器发送数据
Java Sockets - Sending data from client to server
我的objective:从客户端程序向服务器程序发送一个局部变量。
我连接了客户端和服务器,我知道如何从客户端向服务器发送字符串消息。
示例:
private void sendToServer(Socket clientSocket) throws IOException{
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream()));
writer.write("You have connected to the server.");
writer.flush();
writer.close();
}
以上代码完美运行并发送消息。
但是如果我想在客户端和服务器之间发送 data/variables 怎么办?
例如,如果我有一个变量 float a = 0.5
或二维整数数组等,我将如何将其从客户端发送到服务器,反之亦然?
例如,我尝试使用 writer.write(a)
来做同样的事情,但是 writer.write()
的输入是有限的,所以我觉得我的做法不正确。
除了使用 BufferedReaders&BufferedWriters 之外,如果我有更好的方法来尝试发送变量,你能告诉我吗?
谢谢!
在处理java client/server通信时,如果你对两端有完全的控制权并且不预料设计会发生变化,你可以直接执行通过 Object*Stream 类.
直接使用 Java 序列化进行编码
示例:
ObjectOutputStream output = new ObjectOutputStream(bufferedSocketStream);
output.writeInt(42); // Write a primitive integer
output.writeObject("Hello World"); // Write a string as an object
output.writeObject(myClass); // Write a class instance that you've implemented the "Serialize" interface
output.flush();
/* INPUT */
ObjectInputStream inputStream = new ObjectInputStream(bis);
int value = inputStream.readInt(); // Will receive 42
Object value2 = inputStream.readObject(); // Will receive "Hello World"
Object value3 = inputStream.readObject(); // Will receive your serialized class instance
(参见 https://docs.oracle.com/javase/8/docs/api/java/io/ObjectOutputStream.html and https://docs.oracle.com/javase/8/docs/api/java/io/ObjectInputStream.html)
我的objective:从客户端程序向服务器程序发送一个局部变量。
我连接了客户端和服务器,我知道如何从客户端向服务器发送字符串消息。
示例:
private void sendToServer(Socket clientSocket) throws IOException{
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream()));
writer.write("You have connected to the server.");
writer.flush();
writer.close();
}
以上代码完美运行并发送消息。
但是如果我想在客户端和服务器之间发送 data/variables 怎么办?
例如,如果我有一个变量 float a = 0.5
或二维整数数组等,我将如何将其从客户端发送到服务器,反之亦然?
例如,我尝试使用 writer.write(a)
来做同样的事情,但是 writer.write()
的输入是有限的,所以我觉得我的做法不正确。
除了使用 BufferedReaders&BufferedWriters 之外,如果我有更好的方法来尝试发送变量,你能告诉我吗?
谢谢!
在处理java client/server通信时,如果你对两端有完全的控制权并且不预料设计会发生变化,你可以直接执行通过 Object*Stream 类.
直接使用 Java 序列化进行编码示例:
ObjectOutputStream output = new ObjectOutputStream(bufferedSocketStream);
output.writeInt(42); // Write a primitive integer
output.writeObject("Hello World"); // Write a string as an object
output.writeObject(myClass); // Write a class instance that you've implemented the "Serialize" interface
output.flush();
/* INPUT */
ObjectInputStream inputStream = new ObjectInputStream(bis);
int value = inputStream.readInt(); // Will receive 42
Object value2 = inputStream.readObject(); // Will receive "Hello World"
Object value3 = inputStream.readObject(); // Will receive your serialized class instance
(参见 https://docs.oracle.com/javase/8/docs/api/java/io/ObjectOutputStream.html and https://docs.oracle.com/javase/8/docs/api/java/io/ObjectInputStream.html)