错在哪里呀(简易聊天程序)???

wkcgy 2010-05-13 09:25:29
这是Client端。
import java.awt.*;
import java.io.*;
import java.awt.event.*;
import java.io.IOException;
import java.net.*;

public class Client extends Frame {

TextField tf = new TextField();
TextArea ta = new TextArea();
Socket s = null;

DataOutputStream dos = null;

public void luanchFrame() {
this.setSize(500, 300);
this.setResizable(false);
this.add(ta, BorderLayout.NORTH);
this.add(tf, BorderLayout.SOUTH);
this.setVisible(true);
tf.addActionListener(new TfListener());
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
disConnect();
System.exit(0);
}
});
}
public static void main(String[] args) {
Client c = new Client();
c.luanchFrame();
c.connectToServer();
}

public void disConnect() {
try {
dos.close();
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}

public void connectToServer() {
try {
s = new Socket("127.0.0.1", 8888);
dos = new DataOutputStream(s.getOutputStream());
System.out.println("connect");
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

public class TfListener implements ActionListener {

public void actionPerformed(ActionEvent e) {
String tfString = tf.getText();
ta.setText(ta.getText() + tfString + '\n');
tf.setText("");
try {
dos.writeUTF(tfString);
dos.flush();

} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}



这是Server端。

import java.io.IOException;
import java.io.*;
import java.net.*;

public class Server {

public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(8888);
Socket s = ss.accept();
System.out.println("connect to server");
DataInputStream dis = new DataInputStream(s.getInputStream());
String str = dis.readUTF();
System.out.println(str);
dis.close();

} catch (IOException e) {
e.printStackTrace();
}
}
}
在Client端每当输入超过两条语句以后在CLient端就会报错具体内容如下!!!

java.net.SocketException: Software caused connection abort: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
at java.io.DataOutputStream.write(DataOutputStream.java:90)
at java.io.DataOutputStream.writeUTF(DataOutputStream.java:384)
at java.io.DataOutputStream.writeUTF(DataOutputStream.java:306)
at Client$TfListener.actionPerformed(Client.java:63)
at java.awt.TextField.processActionEvent(TextField.java:596)
at java.awt.TextField.processEvent(TextField.java:564)
at java.awt.Component.dispatchEventImpl(Component.java:4501)
at java.awt.Component.dispatchEvent(Component.java:4331)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)


...全文
224 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
taolei 2010-05-14
  • 打赏
  • 举报
回复
Server端每次只收到一条消息就close了,当然不能再收第二条消息。在Server端加个循环就可以了。
lodachi 2010-05-14
  • 打赏
  • 举报
回复
上面不对

ServerSocket ss = new ServerSocket(8888);
Socket s = ss.accept();
System.out.println("connect to server");
DataInputStream dis = new DataInputStream(s.getInputStream());
String str = null;
while(true){
if((str = dis.readUTF())!=null)
System.out.println(str);
}
dis.close();
lodachi 2010-05-14
  • 打赏
  • 举报
回复

ServerSocket ss = new ServerSocket(8888);
Socket s = ss.accept();
System.out.println("connect to server");
DataInputStream dis = new DataInputStream(s.getInputStream());
String str = null;
while((str = dis.readUTF())!=null){
System.out.println(str);
}
dis.close();
tcm441224375 2010-05-14
  • 打赏
  • 举报
回复
你应该及时关掉Socket s.close()
还有ServerSocket ss.close()
lonefeifei 2010-05-14
  • 打赏
  • 举报
回复
try
{
while(true)
{
Soceket s= ss.accept();
DataInputStream dis = new DataInputStream(s.getInputStream());
String str = dis.readUTF();
System.out.println(str);
dis.close();
}

}
catch(Exception e){}

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧