- 学·问
- 帖子详情
Socket使用BufferedWriter换行问题
李勇军
发表于2018年12月21日
<p>大家在进行网络通信时,比如现在需要做一个简单的基于服务器和客户端的聊天程序,客户端可以反复多次地向服务器端发送消息,当发送消息为bye或goodbye时,则结束程序。如果使用字节流或者不带缓冲的字符流,均可正常发送,但如果使用客户端使用BufferedReader使用readLine()从键盘读取一行内容,使用BufferedWriter的write()方法将内容发送至服务器端,服务器端使用BufferedReader来进行读取,此时运行程序运行会发现,客户端发送一条消息,服务器端并接收不到,原因在哪呢?应该如何解决?</p><p><br ></p><p>参考代码如下:</p><p>服务器端代码:</p><p>public class Server {</p><p> public static void main(String[] args) {</p><p> ServerSocket serverSocket = null;</p><p> Socket socket = null;</p><p> BufferedReader br = null;</p><p> </p><p> try {</p><p> serverSocket = new ServerSocket(8888);</p><p> socket = serverSocket.accept();</p><p> while(true) {</p><p> br = new BufferedReader(new InputStreamReader(socket.getInputStream()));</p><p> String str = br.readLine();</p><p> </p><p> System.out.println("客户端:"+str);</p><p> Thread.sleep(1000);</p><p> if("bye".equals(str) || "goodbye".equals(str))</p><p> break;</p><p> }</p><p> } catch (IOException e) {</p><p> e.printStackTrace();</p><p> } catch (InterruptedException e) {</p><p> e.printStackTrace();</p><p> }finally {</p><p> </p><p> try {</p><p> if(br != null)</p><p> br.close();</p><p> if(socket != null)</p><p> socket.close();</p><p> if(serverSocket != null)</p><p> serverSocket.close();</p><p> } catch (IOException e) {</p><p> e.printStackTrace();</p><p> }</p><p> </p><p> }</p><p> }</p><p>}</p><p><br ></p><p>客户端代码:</p><p>public class Client {</p><p> public static void main(String[] args) {</p><p> Socket socket = null;</p><p> Scanner input = null;</p><p> BufferedWriter bw = null;</p><p> try {</p><p> socket = new Socket("localhost",8888); </p><p> BufferedReader br = new BufferedReader(new InputStreamReader(System.in));</p><p> String str; </p><p> input = new Scanner(System.in); </p><p> bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); </p><p> while(true) {</p><p> str = br.readLine();</p><p> bw.write(str);</p><p><br ></p><p>bw.flush();<br ></p><p> if("bye".equals(str) || "goodbye".equals(str))</p><p> break; </p><p> System.out.println("客户端信息已发出");</p><p> Thread.sleep(1000); </p><p> }</p><p> </p><p> } catch (IOException e) {</p><p> e.printStackTrace();</p><p> } catch (InterruptedException e) {</p><p> e.printStackTrace();</p><p> }finally {</p><p> </p><p> try {</p><p> if(bw != null)</p><p> bw.close();</p><p> if(input != null)</p><p> input.close();</p><p> if(socket != null)</p><p> socket.close();</p><p> } catch (IOException e) {</p><p> e.printStackTrace();</p><p> }</p><p> </p><p> }</p><p> </p><p> }</p><p>}</p><p><br ></p>
4
回复