当前位置: 首页 > 面试题库 >

“软件导致连接中止:接收失败”的原因

亢胤运
2023-03-14
问题内容

我找到了客户端/服务器代码,但出现此错误:

java.net.SocketException:软件导致连接中止:recv失败

服务器代码:

import java.net.*;
import java.lang.*;
import java.io.*;

public class Server{

//port number should be more than 1024

public static final int PORT = 1025;

public static void main( String args[]) throws IOException
{
 ServerSocket sersock = null;
 Socket sock = null;
 System.out.println(" Wait !! ");

 try
 {
  //  Initialising the ServerSocket
  sersock =  new ServerSocket(PORT);

  // Gives the Server Details Machine name, Port number

  System.out.println("Server Started  :"+sersock);

  try
  {

   // makes a socket connection to particular client after 
   // which two way communication take place

   sock = sersock.accept();

   System.out.println("Client Connected  :"+ sock);

   // Receive message from client i.e Request from client

   BufferedReader ins = new BufferedReader(new InputStreamReader(sock.getInputStream()));
   // Send message to the client i.e Response

   PrintStream ios = new PrintStream(sock.getOutputStream());
   ios.println("Hello from server");
   ios.close();

   // Close the Socket connection

    sock.close();

    }
    catch(SocketException se)
    {
    System.out.println("Server Socket problem  "+se.getMessage());
    }
    catch(Exception e)
    {
    System.out.println("Couldn't start " 
                  + e.getMessage()) ;     
    }

 // Usage of some methods in Socket class

  System.out.println(" Connection from :  " + 
  sock.getInetAddress());

 }finally{} // main

}
}// Server class

客户代码:

import java.lang.*;
import java.io.*;
import java.net.*;
import java.net.InetAddress;


public class client
{
 public static void main(String args[])
 {
 Socket sock=null;
 DataInputStream dis=null;
 PrintStream ps=null;
 System.out.println(" Trying to connect");

 try 
 {
 // to get the ip address of the  server by the name

 InetAddress ip =InetAddress.getByName
 ("localhost");

 // Connecting to the port 1025 declared in the Serverclass
 // Creates a socket with the server bind to it.

  sock= new Socket(ip,1025);
  ps= new PrintStream(sock.getOutputStream());
  ps.println(" Hi from client");
  BufferedReader is = new BufferedReader(new InputStreamReader(sock.getInputStream()));
  System.out.println(is.readLine());

 }
 catch(SocketException e)
 {
  System.out.println("SocketException " + e);
 }
 catch(IOException e)
 {
  System.out.println("IOException " + e);
 }

  // Finally closing the socket from the client side

 finally
 {
 try
  {
   sock.close();
  }
  catch(IOException ie)
  {
   System.out.println(" Close Error   :" + 
   ie.getMessage());
  }               
 }  // finally

} // main 
}   // Class Client

服务器代码提供以下输出:

C:\ WorkStation \ Testcserver \ src> java服务器
 等等!
服务器已启动:ServerSocket [addr = 0.0.0.0 / 0.0.0.0,port = 0,localport = 1025]
客户端已连接:套接字[地址= / 127.0.0.1,端口= 56143,本地端口= 1025]
 连接来自:/127.0.0.1

C:\ WorkStation \ Testcserver \ src>

客户端代码给出以下输出:

C:\ WorkStation \ testClient \ src> java客户端
 尝试连接
SocketException java.net.SocketException:软件导致连接中止:recv
 失败了



    C:\WorkStation\testClient\src>java client
 Trying to connect
java.net.SocketException: Software caused connection abort: recv failed
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.read(SocketInputStream.java:150)
        at java.net.SocketInputStream.read(SocketInputStream.java:121)
        at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:283)
        at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:325)
        at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:177)
        at java.io.InputStreamReader.read(InputStreamReader.java:184)
        at java.io.BufferedReader.fill(BufferedReader.java:154)
        at java.io.BufferedReader.readLine(BufferedReader.java:317)
        at java.io.BufferedReader.readLine(BufferedReader.java:382)
        at client.main(client.java:30)

问题答案:

服务器不等待来自客户端的任何数据,并且当服务器退出时,连接将关闭。

ins.readLine()这样的代码添加到服务器代码中:

// Receive message from client i.e Request from client

BufferedReader ins = new BufferedReader(new InputStreamReader(sock.getInputStream()));
System.out.println(ins.readLine());


 类似资料:
  • 问题内容: 我已经遇到了几天的问题,这是详细信息堆栈信息: 我想通过mybatis和spring更新mysql中的一条记录,然后一个接一个地更新它,下面是mybatis config:更新建议集count =#{count},version =#{version},freq =#{freq}其中id =#{id} 以及服务代码: 有人可以帮我吗?非常感谢。 问题答案: 你的mySQL连接在连接池识

  • 问题内容: Netbeans IDE中的Java,Hibernate,MySQL项目中出现异常。 我做了一些挖掘工作,以尝试修复此奇怪的Socket异常,但无济于事。 一些论坛解决方案建议为Hibernate实现c3p0连接池。没有修复。 其他人建议禁用AV和防火墙(!!),因为它们可能会干扰套接字连接。没有修复。 我已经用Hibernate标记了这个问题,因为我不确定是休眠的原因,但是异常发生在

  • 问题内容: 这个问题已经在这里有了答案 : “软件导致连接中止:套接字写入错误”的官方原因 (14个答案) 3年前关闭。 所有。我已经遇到了几天的问题,这是详细信息堆栈信息: 我想通过mybatis和spring更新mysql中的一条记录,然后一个接一个地更新它,下面是mybatis config:更新建议集count =#{count},version =#{version},freq =#{f

  • 在使用Spring和Wiremock进行集成测试时,我遇到了一个非常奇怪的情况:突然间歇性地开始失败。以下错误片段: 上下文如下:我添加了一个新的测试,该测试使用wiremock来存根响应: 对这个存根endpoint的调用如下: 奇怪的是: < li >相同的测试在我的本地计算机上运行没有任何问题-如果单独运行的话 < li >在我的机器上运行所有测试时,有时相同的测试会失败,有时不会 < li

  • 问题内容: 尝试部署Java应用程序时遇到问题。 要么 在 pom.xml中, 我有这个: 在 tomcat-users.xml中, 我有以下内容: 同样在 Maven / conf / settings.xml中, 我有: 当我试图去 并输入用户名和密码(管理员admin)我有错误: 但是我输入了 tomcat-users.xml ,该用户admin具有manager-gui角色。我正在使用To

  • 我在尝试部署Java应用程序时遇到了一个问题。 或者 在pom中。xml我有一个: 在tomcat用户中。xml我有一个: 同样在Maven/conf/settings中。xml我有: 当我想去 输入用户名和密码(admin)我有错误: 但我输入了tomcat用户。xml该用户管理员具有manager gui角色。我用的是Tomcat 7.0.56和Jenkins。还可以使用命令:clean和to