我正在創建一個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
你是什麼意思「不按預期工作」?你有沒有嘗試單步執行代碼? –
是的!當我嘗試調試它時,我收到以下消息:「連接到目標虛擬機,地址:'127.0.0.1:6883',傳輸:'套接字' 聊天服務器正在運行」。 –