【发布时间】:2019-12-06 10:23:30
【问题描述】:
我正在使用此代码在客户端和服务器之间进行通信,现在我需要并且正在努力解决的是如何使服务器接受来自客户端的多条消息;并且客户端和服务器之间的通信不是 1 条客户端消息然后 1 条服务器消息,而是他们可以按每个顺序写入。
我该怎么做?
谢谢
这是我的代码:
public class GossipServer {
public static void main(String[] args) throws Exception{
//create a server socket
ServerSocket sersock = new ServerSocket(3000);
System.out.println("Server ready for chatting");
Socket sock = sersock.accept();
System.out.println("Client accepted information"+sock.getInetAddress()+sock.getPort());
// reading from keyboard (keyRead object)
BufferedReader keyRead = new BufferedReader(new InputStreamReader(System.in));
System.out.println(""+keyRead.toString());
// sending to client (pwrite object)
OutputStream ostream = sock.getOutputStream();
PrintWriter pwrite = new PrintWriter(ostream, true);
System.out.println("output stream "+ostream.toString());
// receiving from client ( receiveRead object)
InputStream istream = sock.getInputStream();
BufferedReader receiveRead = new BufferedReader(new InputStreamReader(istream));
System.out.println("input stream "+istream.toString());
//receiving message. send message
String receiveMessage, sendMessage;
while(true) {
if((receiveMessage = receiveRead.readLine()) != null ) {
System.out.println(receiveMessage); }
sendMessage = keyRead.readLine();
pwrite.println(sendMessage);
pwrite.flush();
}
}
}
}
客户:
public class GossipClient {
public static void main(String[] args) throws Exception {
Socket sock = new Socket("127.0.0.1", 3000);
// reading from keyboard (keyRead object)
BufferedReader keyRead = new BufferedReader(new InputStreamReader(System.in));
// sending to client (pwrite object)
OutputStream ostream = sock.getOutputStream();
PrintWriter pwrite = new PrintWriter(ostream, true);
// receiving from server ( receiveRead object)
InputStream istream = sock.getInputStream();
BufferedReader receiveRead = new BufferedReader(new InputStreamReader(istream));
System.out.println("Start the chitchat, type and press Enter key");
String receiveMessage, sendMessage;
while(true) {
sendMessage = keyRead.readLine(); // keyboard reading
pwrite.println(sendMessage); // sending to server
pwrite.flush(); // flush the data
if((receiveMessage = receiveRead.readLine()) != null) //receive from server {
System.out.println(receiveMessage); // displaying at DOS prompt
}
}
}
}
【问题讨论】: