这是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)

解决方案 »

  1.   

    Server端每次只收到一条消息就close了,当然不能再收第二条消息。在Server端加个循环就可以了。
      

  2.   

    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){}
      

  3.   

    你应该及时关掉Socket  s.close()
    还有ServerSocket     ss.close()
      

  4.   


    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();
      

  5.   

    上面不对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();