0

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);}
}
4

1 に答える 1

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;
}
于 2013-06-26T19:05:50.300 に答える