我正在尝试使用套接字发送一个通过ObjectOutputStream
保存一些信息的对象。当我调用方法Client_Handler(String auth, String user)
并发送对象时它工作正常,但当我再次调用它时它不起作用。我希望能够使用连接多次向其中发送包含不同数据的对象。
客户端:
public void Client_Handler(String auth, String user){
try{
socket2 = new Socket(serverAddress, 8080);
User_Authorization us3 = new User_Authorization();
ObjectOutputStream out2 = new ObjectOutputStream(socket2.getOutputStream());
us3.set_name(user);
us3.set_authorization(auth);
out2.writeUnshared(us3);
}catch(Exception e){
JOptionPane.showMessageDialog(null, e, "Error", JOptionPane.ERROR_MESSAGE);
}
}
服务器:
public class Conn implements Runnable{
private Socket socket;
public static ServerSocket server ;
public void go(){
Thread r = new Thread(this);
try{
r.start();
}catch(Exception e){
JOptionPane.showMessageDialog(null, e, "Error", JOptionPane.ERROR_MESSAGE);
}
}
@Override
public void run() {
try{
server = new ServerSocket(8080);
socket = server.accept();
while(true){
Login.User_Authorization us = null;
ObjectInputStream in = new ObjectInputStream(socket.getInputStream());
us = (Login.User_Authorization) in.readObject();
System.out.println(us.get_name()+ "he's " +us.get_authorization());
}
}catch(Exception e){JOptionPane.showMessageDialog(null, e, "Error", JOptionPane.ERROR_MESSAGE);}
}
答案 0 :(得分:1)
当我调用方法Client_Handler(String auth,String user)和 发送它工作正常的对象,但是当我再次调用它时它没有 工作
因为,每次调用Client_Handler(String auth, String user)
方法时,您都试图通过socket2 = new Socket(serverAddress, 8080);
与服务器建立新连接,这将终止先前的连接。这就是你得到EOFException
例外的原因。在调用socket2
方法之前,您应该创建一次Client_Handler
对象。在调用Client_Handler
方法时,只需使用已初始化的Socket socket2
。
您的代码在客户端可能是这样的:
Socket socket2;
ObjectOutputStream out2 = null;
public void mainMethod()
{
try
{
socket2 = new Socket(serverAddress, 8080);
out2 = new ObjectOutputStream(socket2.getOutputStream());
boolean canSend = true;
while (canSend)
{
canSend = Client_Handler("authentication","user");
}
}
catch (Exception ex)
{
ex.printStackTrace();
}
finally
{
if (out2!=null)
{
try
{
out2.close();
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
}
}
public boolean Client_Handler(String auth, String user)
{
try
{
User_Authorization us3 = new User_Authorization();
us3.set_name(user);
us3.set_authorization(auth);
out2.writeUnshared(us3);
}catch(Exception e)
{
JOptionPane.showMessageDialog(null, e, "Error", JOptionPane.ERROR_MESSAGE);
return false;
}
return true;
}