2つの数字を入力するアプリケーションを作成しようとしています。数字が解析され、TCPプロトコル経由でサーバーに送信されてから追加され、戻されて設定されますTextFieldに追加します。問題は、BufferedReaderストリームと違って、run()メソッドが数値の入力を待っていないことです。私は現在、DataInputStreamとDataOutPutStreamを使って作業しています。run()メソッドがデータ入力を待っていません
次のコードは次のとおりです。
public class Server implements Runnable {
public Server(){
}
@Override
public void run() {
while (true) {
try (ServerSocket serverSocket = new ServerSocket(1000);
Socket sSocket = serverSocket.accept();
DataInputStream in = new DataInputStream(sSocket.getInputStream());
DataOutputStream out = new DataOutputStream(sSocket.getOutputStream()))
{
System.out.println("Client connected.");
Integer s1 = in.read();
Integer s2 = in.read();
Integer result = s1 + s2;
out.write(result);
}
catch(IOException e)
{
System.out.println(e.getMessage());
}
}
}
}
およびクライアントクラス:
bs.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ke) {
n1 = Integer.parseInt(tf1.getText());
n2 = Integer.parseInt(tf2.getText());
tf1.setText(String.valueOf(n1));
tf2.setText(String.valueOf(n2));
}
});
}
@Override
public void run() {
try(Socket clientSocket = new Socket("localhost", 1000);
DataInputStream in = new DataInputStream(clientSocket.getInputStream());
DataOutputStream out = new DataOutputStream(clientSocket.getOutputStream()))
{
out.write(n1);
out.write(n2);
Integer rezultat = in.read();
tf3.setText(String.valueOf(result));
} catch (IOException ex) {
System.out.println(ex.getMessage());
}
}
}
そして私は、メインクラス経由とスレッドの両方始めています。 ありがとうございます! :D
- 1クライアントで?もしそうなら、どうやっていつ始めているのですか? – Kenney
Serverクラスのrun()メソッドが値を入力してボタンを押すのを待っているわけではないので、プロジェクトを実行するときに整数にデフォルト値の0が割り当てられます...私は両方のクラスを開始していますメインクラスのスレッドを介して。 –
問題はおそらくあなたが投稿しなかったコードにあります。考え方は次のとおりです。サーバーは1つのServerSocketをループではなく1回だけ開き、ループ内で接続を受け入れます。サーバ側で "Client connected"と表示された場合、クライアントが接続しました。つまり、クライアントの 'run'メソッドが実行されたことを意味します。私の理解は、あなたのクライアントは2つのテキストフィールドの他にボタンがあり、あなたがそれを押すと、サーバーは追加を実行するように連絡するつもりです。この場合、クライアントスレッドを 'main'で開始するのではなく、ボタンを押すためのイベントハンドラで開始します。 – Kenney