私はクイズのゲームの一部であるJava Webサーバーを作成しています。テスト目的のために、私はカウンターを含めました。サーバーには、スレッドを処理するFixedThreadPoolがあります。ThreadPoolでJava Webサーバーが応答していません
サーバーには、データベースからデータを収集するBufferedreaderと、出力をクライアントに書き込むために使用するPrintstreamがあります。さて、Printstreamの意図は、カウンターの結果をプリントアウトすることです。しかし、私はサーバーを実行すると何も起こらない、printStreamnは意図したように動作していません。端末に出力がなく、クライアントはサーバから何も受信していません。なにが問題ですか?
サーバー
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class QuizServer {
private static final int serverPort = 9001;
public static void main(String[] args) throws Exception {
ExecutorService theExecutor = Executors.newFixedThreadPool(4);
System.out.println("The chat server is running.");
ServerSocket quizSocket = new ServerSocket(serverPort);
while (true) { //Skriver ut While True
Socket connection = quizSocket.accept();
theExecutor.execute(new Broadcaster(connection));
}
}
}
class Broadcaster extends Thread {
private BufferedReader read;
private PrintStream write;
private Socket broadcastSocket;
static int counter = 0;
public Broadcaster(Socket broadcastSocket) throws IOException{
read = new BufferedReader(new
InputStreamReader(broadcastSocket.getInputStream()));
write = new PrintStream(broadcastSocket.getOutputStream());
}
@Override
public void run() {
while (true) {
try {
Thread.sleep(1000);
counter += 1;
write.println("Räknare: " + counter);
} catch (InterruptedException e) {
System.out.println("Sleep exception: " + e);
}
}
}
}
デバッグ
Connected to the target VM, address: '127.0.0.1:1925', transport: 'socket'
The chat server is running.
Exception in thread "main" java.net.BindException: Address already in use:
JVM_Bind
at java.net.DualStackPlainSocketImpl.bind0(Native Method)
at java.net.DualStackPlainSocketImpl.socketBind
(DualStackPlainSocketImpl.java:106)
at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:387)
at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:190)
at java.net.ServerSocket.bind(ServerSocket.java:375)
at java.net.ServerSocket.<init>(ServerSocket.java:237)
at java.net.ServerSocket.<init>(ServerSocket.java:128)
at QuizServer.main(QuizServer.java:19)
Disconnected from the target VM, address: '127.0.0.1:1925', transport:
'socket'
Process finished with exit code 1
クライアント
public class Client implements Runnable {
@FXML
private Button bQuit = new Button();
@FXML
private TextArea Out = new TextArea();
@FXML
private TextField Input = new TextField();
@FXML
private TextField IP = new TextField();
@FXML
private TextField aliasField = new TextField();
String alias;
String ServerAddress = "localhost";
String userAnswer;
BufferedReader reader;
PrintWriter writer;
@FXML
public void initialize() {
bQuit.setOnAction(event -> Platform.exit());
aliasField.setOnAction(a -> {
alias = aliasField.getText();
Input.setOnAction(b -> {
userAnswer = Input.getText();
});
});
aliasField.setPromptText("Alias");
Input.setPromptText("And your answer is:");
}
@Override
public void run() {
try {
Socket clientSocket = new Socket(ServerAddress, 9001);
reader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
writer = new PrintWriter(clientSocket.getOutputStream(),true); //Koppla user input hit.
Scanner newObject= new Scanner(reader);
while(newObject.hasNextLine())
Out.setText(newObject.nextLine());
//
} catch (IOException e) {
}
}
}
に設定する必要がありますが、そのソケットに接続するクライアントのためのコードを投稿することができますか? – uzr
「意図したとおりに作業していない」とはどういう意味ですか?あなたはコードをステップアップしようとしましたか? –
はい!デバッグしようとすると、次のメッセージが表示されます。「ターゲットVMに接続しました。アドレス: '127.0.0.1:6883'、トランスポート: 'ソケット' チャットサーバーが実行されています。 –