0

サーバーとクライアント間のデータ転送を作成しようとしています。接続は確立されていますが、サーバーとクライアントの間でデータが転送されていません。サーバ側:

    public static void CreateServerSocket() {
    try {
        server = new ServerSocket(9999);
        t = new Thread(new SocketServer());
        t.start();
    } catch (IOException ex) {
        Logger.getLogger(SocketServer.class.getName()).log(Level.SEVERE, null, ex);
    }

}

public static void closeServer() {
    try {
        server.close();
    } catch (IOException ex) {
        Logger.getLogger(SocketServer.class.getName()).log(Level.SEVERE, null, ex);
    }
}

public static void sentSide(String side) {
    out.print(side);
}

@Override
public void run() {

    try {
        client = server.accept();
        out = new PrintWriter(client.getOutputStream(), true);
        in = new BufferedReader(new InputStreamReader(client.getInputStream()));
        out.print("test from server");
        while (true){
            strIn=in.readLine();
            System.out.println(strIn);
        }
    } catch (IOException ex) {
        Logger.getLogger(SocketServer.class.getName()).log(Level.SEVERE, null, ex);
    }
}

クライアント側:

public class SocketClient implements Runnable {

static Socket client;
static Thread t;
static PrintWriter out;
static BufferedReader in;
static String strIn;

public static boolean CreateClientSocket(InetAddress ip) {
    try {
        client = new Socket(ip, 9999);
        t = new Thread(new SocketClient());
        t.start();
        return true;
    } catch (UnknownHostException ex) {
        Logger.getLogger(SocketServer.class.getName()).log(Level.SEVERE, null, ex);
        return false;
    } catch (IOException ex) {
        Logger.getLogger(SocketServer.class.getName()).log(Level.SEVERE, null, ex);
        return false;
    }
}

public static void closeClient() {
    try {
        client.close();
    } catch (IOException ex) {
        Logger.getLogger(SocketServer.class.getName()).log(Level.SEVERE, null, ex);
    }
}

@Override
public void run() {
    try {
        out = new PrintWriter(client.getOutputStream(), true);
        in = new BufferedReader(new InputStreamReader(client.getInputStream()));
        out.print("test from client");
        while (true) {
            strIn = in.readLine();
            System.out.println(strIn);
            DialogMultiplayerStart.setSide(strIn);
        }
    } catch (IOException ex) {
        Logger.getLogger(SocketClient.class.getName()).log(Level.SEVERE, null, ex);
    }
}

問題は、out.print がデータを送信していないことです。CreateClientSocket が true を返すため、接続が確立されますが、out.print("test from client/server") も setSide メソッドも機能していません。よろしくお願いします。

4

1 に答える 1

4

クライアントは次のことから始めます

out.print("test from client");

次に、サーバーからの行全体を待ちます。

strIn = in.readLine();

サーバーは次のように起動します

out.print("test from server");

次に、クライアントからの行全体を待ちます。

strIn = in.readLine();

したがって、両方の側が、もう一方の側が行末を送信するのを待っています: デッドロック。

に変更します

out.println("test from server");

out.println("test from client");

もう少し先に進みます。しかし、別の問題が発生します。両側が無限ループで読み取り、それ以上何も送信しません。

于 2013-07-28T13:56:25.883 に答える