【问题标题】:Socket Programming in javajava中的套接字编程
【发布时间】:2010-11-25 08:36:38
【问题描述】:

我正在执行一个套接字程序。该程序是为了,只是回显用户输入, 由服务器。即,如果用户作为 Apple 提供输入,则服务器回复应该是 Apple。 但是我现在面临的问题是,服务器正在发送一条消息(而不是 Apple),它曾经是我们登录服务器时收到的横幅消息。一旦横幅消息结束,就会显示以下错误:

Exception in thread "main" java.net.SocketException: Software caused connection abort: recv failed
 at java.net.SocketInputStream.socketRead0(Native Method)
 at java.net.SocketInputStream.read(Unknown Source)
 at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
 at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
 at sun.nio.cs.StreamDecoder.read(Unknown Source)
 at java.io.InputStreamReader.read(Unknown Source)
 at java.io.BufferedReader.fill(Unknown Source)
 at java.io.BufferedReader.readLine(Unknown Source)
 at java.io.BufferedReader.readLine(Unknown Source)
 at EchoClient.main(EchoClient.java:69)

以下是我的代码:

import java.net.*;
import java.io.*;
public class EchoClient
{
    public static void main(String[] args) throws IOException
    {
        Socket echosocket = null;   
        PrintWriter out =null;
        BufferedReader in=null;

        //establish the socket connection between the client and the server
        // open a PrintWriter and a BufferedReader on the socket: 

        try
        {   
            echosocket = new Socket("ltesol1.comm.mot.com",22);
            out=new PrintWriter(echosocket.getOutputStream(),true);    
            in=new BufferedReader(new InputStreamReader(echosocket.getInputStream()));    

        }
        catch(UnknownHostException e) 
        {
            System.err.print("Unable to find the host dkc678-01");
            System.exit(1);
        }
        catch(IOException e)
        {
            System.err.print("No IO for host dkc678-01");
            System.exit(1);
        }

        BufferedReader stdIn=new BufferedReader(new InputStreamReader(System.in));

        String userInput;

        while((userInput =stdIn.readLine())!= null )
        {
            out.println(userInput);      
            System.out.println("echo :" + in.readLine());  
        }

        out.close();
        in.close();
        stdIn.close();
        echosocket.close();
    }   

}

【问题讨论】:

  • 请格式化您的代码/消息,使用 101010 按钮获取代码。谢谢。
  • 努力将代码缩减为出现错误的最小程序。你目前混入了一堆不相关的东西。
  • 请停止在每次编辑时对帖子进行反格式。
  • 鉴于当前的代码示例,我认为“问题”很可能出在服务器上。客户端失败,因为连接出现问题,导致 in.readLine() 失败。 PS:等等,会不会是sshd在服务器上运行?
  • 为什么这是一个社区维基?

标签: java


【解决方案1】:

如果你也想连接到 SSH-Server,你必须使用 ssh-protocol:http://javassh.org

您应该在那里找到 ssh-client 的来源。

【讨论】:

    【解决方案2】:

    您能否评论一下我的建议,即另一个服务(即 sshd/telnet 服务器)正在侦听服务器端的 22 端口?或者以其他方式给我们服务器代码?

    【讨论】:

    • 你是对的 Jochem....它是一个 SSH 连接....你的意思是我需要更改端口...?那么端口可能是哪个?
    • 嗯,默认的回显端口是端口 7,也许这就是您期望使用的。否则,您的客户端应该连接到与您的服务器应用程序正在侦听的相同端口(如果您确实有一个)
    【解决方案3】:

    端口 22 通常用于 ssh,它是一种加密连接。您不能使用纯文本流。

    在任何一种情况下,服务器都会断开连接。你需要找出它为什么这样做。

    【讨论】:

      猜你喜欢
      • 2013-10-09
      • 1970-01-01
      • 1970-01-01
      • 2011-08-29
      • 2014-08-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多