java聊天小程序,进来帮帮我!

以下是我的程序代码,老是不知道为什么不能聊天,高手帮帮我。。。。555555~~~~~服务器端:import:略classwangluo1extendsJFrameimp... 以下是我的程序代码,老是不知道为什么不能聊天,高手帮帮我。。。。555555~~~~~
服务器端:
import:略
class wangluo1 extends JFrame implements ActionListener{
JFrame frame=new JFrame();
JPanel panel1=new JPanel();
JPanel panel2=new JPanel();
JTextArea text1=new JTextArea(30,30);
JTextArea text2=new JTextArea(3,25);
JButton sent=new JButton("发送");
InputStream in;
OutputStream out;
Socket client;
ServerSocket server;
public wangluo1(){
add("South",panel2);
add(panel1);
panel1.add(text1);
panel2.setLayout(new FlowLayout());
panel2.add(text2);
panel2.add(sent);
sent.addActionListener(this);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
pack();
setVisible(true);
try{
server=new ServerSocket(10000);
client=server.accept();
in=client.getInputStream();
out=client.getOutputStream();
text1.append("已连接");
}catch(IOException ioe){}
while(true){
try{

byte[]buf=new byte[256];
in.read(buf);
String str=new String(buf);
text1.append("客户机说:"+str);
text1.append("\n");
}catch(IOException e){
}
}
}
public static void main(String[] args) {
new wangluo1();
}
public void actionPerformed(ActionEvent e) {

try{
String s=text2.getText();
byte[]buf=s.getBytes();
text2.setText("");
out.write(buf);
text1.append("\n"+s);
}catch(IOException ie){
}
}
}
客户端:
导入略
public class wangluo2 extends JFrame implements ActionListener{
JFrame frame=new JFrame();
Socket client;
OutputStream os;
InputStream is;
String s;
JTextArea text3=new JTextArea(30,30);
JTextArea text4=new JTextArea(3,25);
JPanel panel1=new JPanel();
JPanel panel2=new JPanel();
JButton clientsent=new JButton("发送");
public wangluo2(){
add("South",panel2);
add(panel1);
panel1.add(text3);
panel2.setLayout(new FlowLayout());
panel2.add(text4);
panel2.add(clientsent);
pack();
setVisible(true);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
clientsent.addActionListener(this);
try{
client=new Socket("127.0.0.1",10000);
text3.append("已连接"); is=client.getInputStream();
os=client.getOutputStream();
}catch(IOException ioe){}

while(true){
try{
byte[]buf=new byte[256];
is.read(buf);
String str=new String(buf);
text3.append("服务器说:"+str);
text3.append("\n");
}catch(IOException e){
}
}
}
public static void main(String[] args) {
new wangluo2();
}
public void actionPerformed(ActionEvent e) {
try{
String str=text4.getText();
byte[]buf=str.getBytes();
text4.setText("");
os.write(buf);
text3.append("\n"+str);
}catch(Exception ee){
}
}
}
我在客户端输入的东西一按发送,服务器端的信息马上被清空。。反过来在服务器端输入,客户端的马上又被清空。。到最后什么都木有了。。。5555555~~~~~~
展开
 我来答
lovepetrel
2009-10-10 · TA获得超过1531个赞
知道小有建树答主
回答量:857
采纳率:100%
帮助的人:0
展开全部
程序错在两个主要的地方:
1.读写流竟然没有关闭???而且在关闭之前应该先Flush(),这是因为用读写流的时候,其实数据是先被读到了内存中,然后用数据写到文件中,当你数据读完的时候不代表你的数据已经写完了,因为还有一部分有可能会留在内存这个缓冲区中。这时候如果你调用了 Close()方法关闭了读写流,那么这部分数据就会丢失,所以应该在关闭读写流之前先Flush(),先清空数据。
2.你在接收发送内容的时候用了
byte[] buf = new byte[256];
is.read(buf);
String str = new String(buf);
简单来说,比如你发送的内容是123,那么最后的str串是“123+253个空格”
在用append追加的时候是看不到的,所以在你打印str的时候去掉空格
text1.append("客户机说:" + "\n" +str.trim());
text3.append("客户机说:" + "\n" +str.trim());

这样就可以了,程序还有很多需要完善的地方,我只是给你小改了下:
服务器端:
class wangluo1 extends JFrame implements ActionListener {
JFrame frame = new JFrame();
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
JTextArea text1 = new JTextArea(30, 30);
JTextArea text2 = new JTextArea(3, 25);
JButton sent = new JButton("发送");
InputStream in;
OutputStream out;
Socket client;
ServerSocket server;

public wangluo1() {
add("South", panel2);
add(panel1);
panel1.add(text1);
panel2.setLayout(new FlowLayout());
panel2.add(text2);
panel2.add(sent);
sent.addActionListener(this);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
try {
in.close();
out.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
System.exit(0);
}
});
pack();
setVisible(true);
this.setTitle("服务器说:");
try {
server = new ServerSocket(10000);
client = server.accept();
in = client.getInputStream();
out = client.getOutputStream();
text1.append("已连接"+"\n");
} catch (IOException ioe) {
}
while (true) {
try {

byte[] buf = new byte[256];
in.read(buf);
String str = new String(buf);
text1.append("客户端说:" + "\n" +str.trim());
text1.append("\n");
} catch (IOException e) {
}
}

}

public static void main(String[] args) {
new wangluo1();
}

public void actionPerformed(ActionEvent e) {

try {
String s = text2.getText();
byte[] buf = s.getBytes();
text2.setText("");
out.write(buf);
out.flush();
text1.append("服务器说:"+"\n" + s + "\n");
} catch (IOException ie) {
}
}
}

客户端:
public class wangluo2 extends JFrame implements ActionListener {
JFrame frame = new JFrame();
Socket client;
OutputStream os;
InputStream is;
String s;
JTextArea text3 = new JTextArea(30, 30);
JTextArea text4 = new JTextArea(3, 25);
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
JButton clientsent = new JButton("发送");

public wangluo2() {
add("South", panel2);
add(panel1);
panel1.add(text3);
panel2.setLayout(new FlowLayout());
panel2.add(text4);
panel2.add(clientsent);
pack();
setVisible(true);
this.setLocation(500, 0);
this.setTitle("客户端");
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
try {
is.close();
os.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

System.exit(0);
}
});
clientsent.addActionListener(this);
try {
client = new Socket("127.0.0.1", 10000);
text3.append("已连接"+"\n");
is = client.getInputStream();
os = client.getOutputStream();
} catch (IOException ioe) {
}

while (true) {
try {
byte[] buf = new byte[256];
is.read(buf);
String str = new String(buf);
text3.append("服务器说:" + "\n" + str.trim());
text3.append("\n");

} catch (IOException e) {
}
}
}

public static void main(String[] args) {
new wangluo2();

}

public void actionPerformed(ActionEvent e) {
try {
String str = text4.getText();
byte[] buf = str.getBytes();
text4.setText("");
os.write(buf);
os.flush();
text3.append("客户端说:"+"\n" + str + "\n");
} catch (Exception ee) {
}
}
}
rainbow1023
2009-10-10 · TA获得超过345个赞
知道小有建树答主
回答量:1107
采纳率:0%
帮助的人:830万
展开全部
没错 每个读取的时候都要flush
建议你用线程来处理
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
回家先睡觉
2009-10-10 · TA获得超过796个赞
知道小有建树答主
回答量:475
采纳率:0%
帮助的人:642万
展开全部
OutputStream在write()之后要flush()
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2009-10-10
展开全部
new os and is
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
a397420507
2009-10-10
知道答主
回答量:4
采纳率:0%
帮助的人:0
展开全部
1楼正确。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式