java.net.SocketException:连接重置,任何人都帮助我

时间:2014-09-18 02:26:58

标签: java sockets tcp

我正在学习tcp / ip协议,我昨天写了一个程序。这是一个简单的代码,客户端发送字符串,服务器接收并将其打印到控制台。但是当我开始时,这就成了错误。请帮我检查一下。这是我的代码。 客户方:

public class Client {
Socket client ;
DataInputStream is;
DataOutputStream os;
public Client(){
    try {
        client=new Socket("localhost", 7777);
    } catch (IOException ex) {
        Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
    }
}
public void send(String txt){
    try {
        os=new DataOutputStream(client.getOutputStream());
        if(os!=null && client!=null)
            os.writeBytes(txt);         
            System.out.println("Send OK");
            close();
    } catch (IOException ex) {
        Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
    }
}
public void close(){
    if(client!= null&& os!= null&& is!= null) {
    try{
    os.close();
    is.close();
    client.close(); 
    } 
    catch(UnknownHostException e) {
        System.err.println(e);
    } catch(IOException e) {
        System.err.println(e);
    }}}}

客户主要:

public static void main(String[] args) {
    // TODO code application logic here
    Client client=new Client();
    client.send("hehea");

}

和服务器:

public class ServerTCP {
PrintStream os;
DataInputStream is;
Socket client;
ServerSocket myserver;


public void open(){
    try {
        myserver=new ServerSocket(7777);
        System.out.println("Open Server ");
        client=myserver.accept();
        listen();
    } catch (IOException ex) {
        Logger.getLogger(ServerTCP.class.getName()).log(Level.SEVERE, null, ex);
    }
}
public void listen(){
    try {
        System.out.println("\nListenning....");            
        is=new DataInputStream(client.getInputStream());
        os=new PrintStream(client.getOutputStream());
        String txt="";
        ReverseString result = null;
        while(true)
        {      
                    result=new ReverseString(is.readLine());                
                    System.out.println(is.readLine());
        }
    } catch (IOException ex) {
        Logger.getLogger(ServerTCP.class.getName()).log(Level.SEVERE, null, ex);
    }       
}  
}

服务器主

 public static void main(String[] args) {
    // TODO code application logic here
    ServerTCP server=new ServerTCP();
    server.open();

最后,控制台中的错误

java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:196)
at java.net.SocketInputStream.read(SocketInputStream.java:122)
at java.net.SocketInputStream.read(SocketInputStream.java:210)
at java.io.DataInputStream.readLine(DataInputStream.java:513)
at daochuoiservertcp.ServerTCP.listen(ServerTCP.java:50)
at daochuoiservertcp.ServerTCP.open(ServerTCP.java:34)
at daochuoiservertcp.Server.main(Server.java:21)

2 个答案:

答案 0 :(得分:1)

  1. 你正在读行,但你不是在发送行。您至少需要在已发送邮件的末尾添加\n
  2. 你无限阅读而不是检查流的结尾。当对等方断开连接时,readLine()方法返回null。此时,您必须退出读取循环并关闭套接字。
  3. 您每次重复阅读两次。这将尝试从输入中读取两个单独的行。它不会两次给你同一条线。这似乎毫无意义。

答案 1 :(得分:0)

这是由服务器或客户端在另一方未完成IO操作时关闭连接引起的。如果你可以在这里粘贴这两个主要方法,那就更好了。然后我们可以进一步检查