我是学生,学习网络编程并遇到一些问题。
这是我的客户:
public class Test2Client_Tranfer_An_Obj {
Socket socket = null;
ObjectOutputStream out;
ObjectInputStream in;
public Test2Client_Tranfer_An_Obj() {
try {
socket = new Socket("localhost", 12345);
out = new ObjectOutputStream(socket.getOutputStream());
in = new ObjectInputStream(socket.getInputStream());
System.out.println("Ready");
System.out.println("" + in.readUTF());
System.out.println("" + in.readUTF());
System.out.println("Recived");
out.writeUTF("hihi");
System.out.println("Sended");
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
System.out.println("Client");
Test2Client_Tranfer_An_Obj test = new Test2Client_Tranfer_An_Obj();
}
}
这是我的服务器:
public class Test2Server_Tranfer_An_Obj {
ServerSocket serverSocket;
ObjectOutputStream out;
ObjectInputStream in;
public Test2Server_Tranfer_An_Obj() {
try {
serverSocket = new ServerSocket(12345);
Socket socket = serverSocket.accept();
out = new ObjectOutputStream(socket.getOutputStream());
in = new ObjectInputStream(socket.getInputStream());
System.out.println("Ready!");
out.writeUTF("huhu");
out.writeUTF("hoho");
System.out.println("Sended");
String s = in.readUTF();
System.out.println("" + s);
System.out.println("Recived");
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
System.out.println("Server");
Test2Server_Tranfer_An_Obj demo = new Test2Server_Tranfer_An_Obj();
}
}
但是,当我运行我的程序时,这个结果:
服务器控制台
服务器 准备! Sended
客户端控制台
客户端就绪
任何人都可以告诉我为什么以及我能做些什么? 感谢阅读! 希望回复你的回答
答案 0 :(得分:1)
对象流过度杀伤。您实际上并没有使用writeObject / readObject,并且使用DataInputStream
和DataOutputStream
可以执行您想要的操作。
在这种特殊情况下,缓冲了对象流,这意味着缓存小写,直到您flush()
或close()
流来提高性能。如果你不这样做,writeUTF
只会写入内存,而不是内存。
c.f。默认情况下,数据流不缓冲。
答案 1 :(得分:0)
In your server after write to the outputstream. you have to add out.flush()
to write to socket