黑马程序员技术交流社区

标题: 聊天小程序问题 [打印本页]

作者: 胡生蒙    时间: 2012-4-27 00:29
标题: 聊天小程序问题
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不到东西?
作者: 罗旭维    时间: 2012-4-27 09:03
这里要用异步处理。
就是接收控制台输入和发送消息有一个线程执行,
然后接收客户端的消息并显示用另一个线程执行。
代码还是自己写一篇还是能掌握的更扎实,我就不贴代码了。

作者: 孙国军    时间: 2012-4-27 09:25
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()读取不到数据
作者: 邵中国    时间: 2012-4-27 14:51
客户端write()后刷新下




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2