黑马程序员技术交流社区
标题:
本地聊天软件为什么server端 不能重复接收字符 怎么回事帮忙
[打印本页]
作者:
付鹏
时间:
2012-3-6 19:44
标题:
本地聊天软件为什么server端 不能重复接收字符 怎么回事帮忙
这事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();
}
}
}
作者:
马胜平
时间:
2012-3-6 19:53
服务端要采用多线程技术
作者:
段玉超
时间:
2012-3-6 19:58
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();
[color=Red] bConnected = true;[/color] [color=Green]//这里你将bConnected 赋值为True[/color]
DataInputStream dis = new DataInputStream(s.getInputStream());
[color=Red] while(bConnected) { [color=YellowGreen]// while 内部没有改变bConnected 的状态,也就是说,这是一个死循环,所以你智能接收一次[/color]
String str = dis.readUTF();
System.out.println(str);
}[/color]
dis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
复制代码
其它地方没有看 你改一下这个地方试试,如果有问题在回复我,我在细看,这会儿我在加班儿没时间
作者:
廖艺聪
时间:
2012-3-6 20:05
服务端好像不能关的吧,关了无法接收数据
作者:
段玉超
时间:
2012-3-6 20:05
建议黑马老师 将这个编辑器换了,或者添加一个携带么的插件,这个代码功能实在太差了、上传个图片吧
Error.jpg
(42.36 KB, 下载次数: 99)
下载附件
2012-3-6 20:05 上传
错误 描述
作者:
段玉超
时间:
2012-3-6 20:09
马胜平 发表于 2012-3-6 19:53
服务端要采用多线程技术
只是一个事例,单线程也是可以的
作者:
lipanfeng
时间:
2012-3-6 20:22
String str =null;
while((str=dis.readUTF())!=null) {
System.out.println(str);
}
建议把读取的内容当作循环条件,不为空时读取
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2