我正在開發一個簡單的Java GUI聊天程序。目標是讓用戶選擇是否託管服務器或作爲客戶端進行連接。所有這些工作。我遇到的問題是讓客戶端或服務器聊天。理想情況下,用戶或服務器可以輸入textField並按回車(或按發送按鈕),然後該消息將被髮送到每個連接的客戶端。在執行過程中,服務器運行一個無限循環,等待更多的客戶端。我遇到的問題有兩方面: 1)我不確定是否將字符串傳遞給輸入流的方式是正確的,以及2)我不知道何時可以讓服務器接收和然後重新發送數據,因爲它在server.accept()
處等待。試圖從文本字段獲取數據輸出到Java聊天程序
這裏的run方法:
public void run()
{
conversationBox.appendText("Session Start.\n");
inputBox.requestFocus();
while (!kill)
{
if (isServer)
{
conversationBox.appendText("Server starting on port " + port + "\n");
conversationBox.appendText("Waiting for clients...\n");
startServer();
}
if (isClient)
{
conversationBox.appendText("Starting connection to host " + host + " on port " + port + "\n");
startClient();
}
}
}
這裏的startClient方法:
public void startClient()
{
try
{
Socket c = new Socket(host, port);
in = new Scanner(c.getInputStream());
out = new PrintWriter(c.getOutputStream());
while (true)
{
if (in.hasNext())
{
Chat.conversationBox.appendText("You Said: " + message);
out.println("Client Said: " + message);
out.flush();
}
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
和這裏的StartServer方法:
public void startServer()
{
try
{
server = new ServerSocket(port);
while (true)
{
s = server.accept();
conversationBox.appendText("Client connected from " + s.getLocalAddress().getHostName() + "\n");
}
}
catch (Exception e)
{
conversationBox.appendText("An error occurred.\n");
e.printStackTrace();
isServer = false;
reEnableAll();
}
}
最後,這裏的actionPerformed其中的一部分我得到數據並(嘗試)將它寫入輸出流:
if (o == sendButton || o == inputBox)
{
if(inputBox.getText() != "")
{
out.println(inputBox.getText());
inputBox.setText("");
}
}
我想我的問題是:我如何重新排列我的方法,以便服務器可以等待客戶端的文本,然後將其發送回所有客戶端?而且,如何將客戶端的文本發送到服務器?
哦,哇,是的,我想這不是一個真正的問題。編輯。 –