-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我该如何调试一些从字面上什么都不做的事情?该程序只是坐在那里等待大声笑... –