客户端连接到服务器后,发送一个Order类的对象,其中包含一个字符串,然后在服务器的标准输出中打印出该字符串。
运行时发现在创建ObjectOutputStream对象和ObjectInputStream对象时,如果先创建ObjectOutputStream对象则程序正常进行,反之若先创建ObjectInputStream对象则程序会卡在创建ObjectInputStream对象时。请高手指教。
代码如下
Order.java
import java.io.Serializable;public class Order implements Serializable
{
private static final long serialVersionUID = 1234567890123L;
private String context;
public Order(String context)
{
this.context = context;
}
public String getContext()
{
return context;
}
}Server.java
import java.io.InputStream;
import java.io.OutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;public class Server
{
private InputStream is;
private ObjectInputStream ois;
private ObjectOutputStream oos;
private OutputStream os;
public Server()
{
try
{
ServerSocket server = new ServerSocket(6000);
Socket client = server.accept();
is = client.getInputStream();
os = client.getOutputStream();
/*
oos = new ObjectOutputStream(os);
ois = new ObjectInputStream(is);
*/
ois = new ObjectInputStream(is);////////////////////////////这两行若交换位置,则程序会正常运行
oos = new ObjectOutputStream(os);//////////////////////////// Order order = (Order)ois.readObject();
System.out.println(order.getContext());
}
catch (Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
new Server();
}
}Client.java
import java.io.InputStream;
import java.io.OutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.InetAddress;public class Client
{
private InputStream is;
private ObjectInputStream ois;
private ObjectOutputStream oos;
private OutputStream os;
public Client()
{
try
{
Socket client = new Socket(InetAddress.getByName("localhost"), 6000);
is = client.getInputStream();
os = client.getOutputStream();
ois = new ObjectInputStream(is);
oos = new ObjectOutputStream(os);
oos.writeObject(new Order("asfd"));
}
catch (Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
new Client();
}
}
运行时发现在创建ObjectOutputStream对象和ObjectInputStream对象时,如果先创建ObjectOutputStream对象则程序正常进行,反之若先创建ObjectInputStream对象则程序会卡在创建ObjectInputStream对象时。请高手指教。
代码如下
Order.java
import java.io.Serializable;public class Order implements Serializable
{
private static final long serialVersionUID = 1234567890123L;
private String context;
public Order(String context)
{
this.context = context;
}
public String getContext()
{
return context;
}
}Server.java
import java.io.InputStream;
import java.io.OutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;public class Server
{
private InputStream is;
private ObjectInputStream ois;
private ObjectOutputStream oos;
private OutputStream os;
public Server()
{
try
{
ServerSocket server = new ServerSocket(6000);
Socket client = server.accept();
is = client.getInputStream();
os = client.getOutputStream();
/*
oos = new ObjectOutputStream(os);
ois = new ObjectInputStream(is);
*/
ois = new ObjectInputStream(is);////////////////////////////这两行若交换位置,则程序会正常运行
oos = new ObjectOutputStream(os);//////////////////////////// Order order = (Order)ois.readObject();
System.out.println(order.getContext());
}
catch (Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
new Server();
}
}Client.java
import java.io.InputStream;
import java.io.OutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.InetAddress;public class Client
{
private InputStream is;
private ObjectInputStream ois;
private ObjectOutputStream oos;
private OutputStream os;
public Client()
{
try
{
Socket client = new Socket(InetAddress.getByName("localhost"), 6000);
is = client.getInputStream();
os = client.getOutputStream();
ois = new ObjectInputStream(is);
oos = new ObjectOutputStream(os);
oos.writeObject(new Order("asfd"));
}
catch (Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
new Client();
}
}
楼主Server类,Client类里的流都没有关闭第二
楼主Server类其实只是读取,为何要开写出流
Client类只是写入,为何要开读入流