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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

这事client端

public class ChatClient extends Frame {
        Socket s = null;

        TextField tfTxt = new TextField();

        TextArea taContent = new TextArea();

        public static void main(String[] args) {
                new ChatClient().launchFrame();
        }

        public void launchFrame() {
                setLocation(400, 300);
                this.setSize(300, 300);
                add(tfTxt, BorderLayout.SOUTH);
                add(taContent, BorderLayout.NORTH);
                pack();
                this.addWindowListener(new WindowAdapter() {

                        @Override
                        public void windowClosing(WindowEvent arg0) {
                                System.exit(0);
                        }
                       
                });
                tfTxt.addActionListener(new TFListener());
                setVisible(true);
                connect();
        }
       
        public void connect() {
                try {
                        s = new Socket("127.0.0.1", 8888);
System.out.println("connected!");
                } catch (UnknownHostException e) {
                        e.printStackTrace();
                } catch (IOException e) {
                        e.printStackTrace();
                }
               
        }
       
        private class TFListener implements ActionListener {

                public void actionPerformed(ActionEvent e) {
                        String str = tfTxt.getText().trim();
                        taContent.setText(str);
                        tfTxt.setText("");               
                        try {
                                DataOutputStream dos = new DataOutputStream(s.getOutputStream());
                                dos.writeUTF(str);
                                dos.flush();
                                dos.close();
                        } catch (IOException e1) {
                                e1.printStackTrace();
                        }
                       
                }
               
        }

}

这事server端 为什么不能重复接收 只是一个本地聊天软件
public class ChatServer {

        public static void main(String[] args) {
                boolean started = false;
                try {
                        ServerSocket ss = new ServerSocket(8888);
                        started = true;
                        while(started) {
                                boolean bConnected = false;
                                Socket s = ss.accept();
                                bConnected = true;
                                DataInputStream dis = new DataInputStream(s.getInputStream());
                                while(bConnected) {
                                        String str = dis.readUTF();
                                        System.out.println(str);
                                }
                                dis.close();
                        }
                } catch (IOException e) {
                        e.printStackTrace();
                }
        }

}

评分

参与人数 1技术分 +2 收起 理由
老罗 + 2

查看全部评分

6 个回复

倒序浏览
服务端要采用多线程技术
回复 使用道具 举报
  1. public class ChatServer {

  2.         public static void main(String[] args) {
  3.                 boolean started = false;
  4.                 try {
  5.                         ServerSocket ss = new ServerSocket(8888);
  6.                         started = true;
  7.                         while(started) {
  8.                                 boolean bConnected = false;
  9.                                 Socket s = ss.accept();
  10.                                [color=Red] bConnected = true;[/color]  [color=Green]//这里你将bConnected 赋值为True[/color]
  11.                                 DataInputStream dis = new DataInputStream(s.getInputStream());
  12.                              [color=Red]   while(bConnected) {     [color=YellowGreen]// while 内部没有改变bConnected 的状态,也就是说,这是一个死循环,所以你智能接收一次[/color]
  13.                                         String str = dis.readUTF();
  14.                                         System.out.println(str);
  15.                                 }[/color]
  16.                                 dis.close();
  17.                         }
  18.                 } catch (IOException e) {
  19.                         e.printStackTrace();
  20.                 }
  21.         }

  22. }
复制代码
其它地方没有看 你改一下这个地方试试,如果有问题在回复我,我在细看,这会儿我在加班儿没时间

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1

查看全部评分

回复 使用道具 举报
服务端好像不能关的吧,关了无法接收数据
回复 使用道具 举报
建议黑马老师 将这个编辑器换了,或者添加一个携带么的插件,这个代码功能实在太差了、上传个图片吧

Error.jpg (42.36 KB, 下载次数: 97)

错误 描述

错误 描述

评分

参与人数 1技术分 +2 收起 理由
老罗 + 2

查看全部评分

回复 使用道具 举报
马胜平 发表于 2012-3-6 19:53
服务端要采用多线程技术

只是一个事例,单线程也是可以的
回复 使用道具 举报
String str =null;  
while((str=dis.readUTF())!=null) {
                                     System.out.println(str);
                                }
建议把读取的内容当作循环条件,不为空时读取

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马