-2
我正在學習一些Java套接字編程,並設法在服務器和客戶端之間建立我的第一個連接。這引發了我的好奇心:如果不是「連接」和「消息接收」消息而是我做了一種「聊天室」類型的事情,而服務器和客戶端輸入是相互打印的,會發生什麼?所以我試着這樣做。關於Java套接字和打印流的好奇心
現在,我知道這是沒有辦法的辦法聊天室創建(我可能會需要線程和諸如此類的東西),但我很好奇,爲什麼這不工作:
服務器:
public void run() throws Exception
{
boolean isChatting = true;
Socket clientSocket = new Socket("localhost", 444);
PrintStream ps = new PrintStream(clientSocket.getOutputStream());
ps.println("Connected.");
BufferedReader bfr = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
BufferedReader bfrClient = new BufferedReader(new InputStreamReader(System.in));
String serverMessage = bfr.readLine();
String clientMessage;
System.out.println("Server: "+serverMessage);
while (isChatting)
{
clientMessage = bfrClient.readLine();
ps.println(clientMessage);
if (clientMessage.toUpperCase().equals("EXIT"))
{
isChatting = false;
}
}
bfr.close();
bfrClient.close();
}
客戶:
public void run() throws Exception
{
boolean isChatting = true;
ServerSocket server = new ServerSocket(444); //Port
Socket sSocket = server.accept();
PrintStream ps = new PrintStream(sSocket.getOutputStream());
BufferedReader bfr = new BufferedReader(new InputStreamReader(sSocket.getInputStream()));
BufferedReader bfrPersonal = new BufferedReader(new InputStreamReader(System.in));
String clientMessage = bfr.readLine();
String messageToSend;
System.out.println("Client: "+clientMessage);
if (clientMessage != null)
{
ps.println("Connected.");
}
while (isChatting)
{
messageToSend = bfrPersonal.readLine();
ps.println(messageToSend);
if (messageToSend.toUpperCase().equals("EXIT"))
{
isChatting = false;
}
}
bfr.close();
bfrPersonal.close();
}
謝謝您的時間! :)
「這沒用」?呃...你有例外嗎?哪一個在哪裏?學習在其他事情之前進行調試 –
雙方都不能發送消息,直到消息從對方顯示出來爲止。這是一個僵局。如果你使用阻塞套接字,你*絕對*必須使用線程來創建一個聊天程序。 –
@DenysSéguret我該如何調試一些從字面上什麼都不做的事情?該程序只是坐在那裏等待大聲笑... –