A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 胡生蒙 中级黑马   /  2012-4-27 00:29  /  1677 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class ChatRoomServer {
        public static void main(String[] args) {
                try {
                        ServerSocket ss = new ServerSocket(4800);
                        Socket s = ss.accept();
                        BufferedReader brs = new BufferedReader(new InputStreamReader(
                                        System.in));
                        BufferedReader br = new BufferedReader(new InputStreamReader(
                                        s.getInputStream()));

                        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
                                        s.getOutputStream()));
            String str1, str2;
                        while (!(str2 = brs.readLine()).equals("bye")) {
                                System.out.println("服务器" + str2);
                                bw.write(str2);
                                bw.flush();
                                                        }

                        while (!(str1 = br.readLine()).equals("bye")) {
                                System.out.print("客户端" + str1);
                        }
                       
                         bw.close();
                         brs.close();
                         br.close();
                } catch (IOException e) {
                        e.printStackTrace();
                }

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class ChatRoomClient {

        public static void main(String[] args) {
                try {
                        Socket s = new Socket("localhost", 4800);
                        BufferedReader brs = new BufferedReader(new InputStreamReader(
                                        System.in));
                        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
                                        s.getOutputStream()));
                        BufferedReader br = new BufferedReader(new InputStreamReader(
                                        s.getInputStream()));
                        String str1, str2;
                        while (!(str1 = brs.readLine()).equals("bye")) {
                                System.out.println("客户端" + str1);
                                bw.write(str1);
                                // str1 = brs.readLine();
                        }
                        while (!(str2 = br.readLine()).equals("bye")) {
                                System.out.println("服务器" + str2);
                        }
                         brs.close();
                        bw.close();
                        br.close();
                } catch (UnknownHostException e) {
                                e.printStackTrace();
                } catch (IOException e) {
                                e.printStackTrace();
                }

        }
}
        }
}
这是聊天的小程序,为什么服务器端老是readLine不到东西?

3 个回复

倒序浏览
这里要用异步处理。
就是接收控制台输入和发送消息有一个线程执行,
然后接收客户端的消息并显示用另一个线程执行。
代码还是自己写一篇还是能掌握的更扎实,我就不贴代码了。
回复 使用道具 举报
while (!(str2 = brs.readLine()).equals("bye")) {
                                 System.out.println("服务器" + str2);
                                 bw.write(str2);
                        while (!(str1 = brs.readLine()).equals("bye")) {
                                 System.out.println("客户端" + str1);
                                 bw.write(str1);
                                 // str1 = brs.readLine();
                         }
                         while (!(str2 = br.readLine()).equals("bye")) {
                                 System.out.println("服务器" + str2);
                         }



你在客户端这,没有刷新,也没有加每一行的结束标识-----"\r\n"

没有刷新,bw.write(str1);读到的东西还存在缓冲区中;


没有结束标识,服务端,读取时readLine()读取不到数据
回复 使用道具 举报
客户端write()后刷新下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马