【问题标题】:Simple Java client-Server : Client doent connect to server简单的 Java 客户端-服务器:客户端未连接到服务器
【发布时间】:2013-06-28 09:55:50
【问题描述】:

我正在实现一个客户端-服务器应用程序。我是新来的 。我尝试关注文章A Simple Java TCP Server and TCP Client

实际上我已经有一个可以工作的客户端(不是我的代码)

所以我只需要为它编写服务器。

另外,我的服务器将仅由一个客户端连接,因此我并不认为需要支持多个客户端。

正如我所见,使用netstat -a 创建了一个监听服务器,但客户端无法连接到它。也没有给出任何令人惊讶的错误消息。就好像对连接的调用被忽略了。在客户端上没有看到异常。

我的服务器代码(可能有问题)

private static void create_request_server(int requestport) {
    // TODO Auto-generated method stub

    try {
        ServerSocket s1 = new ServerSocket(requestport);
        requestsocket = s1.accept();
          // Do some stuff . But this accept never breaks. 
    } catch (Exception e) {
        e.printStackTrace();
    }
}

正确的客户

try {
            fRequestSocket = new Socket("localhost", requestPort);
            fRequestWriter = new PrintWriter(fRequestSocket.getOutputStream());
            fRequestReader = new BufferedReader(new InputStreamReader(fRequestSocket.getInputStream()));


        } catch (UnknownHostException e) {
            abort(" UnknownHostException", e);
        } catch (IOException e) {
            abort(" IOException", e);
        }

仅供参考

我的客户端和服务器都在本地主机上

我的服务器严重不正确吗?

编辑(即将回答)

在下面发布的有价值的 cmets 的帮助下,我弄清楚了问题所在。 问题出在 localhost 和 127.0.0.1 之间

所以我做了一个netstat -a 并看到一个服务器创建如下:

TCP [::]:56283 Sin-Host LISTENING

而不是

TCP 127.0.0.1:56283 Sin-Host LISTENING 

因此客户端无法连接。关于如何使服务器绑定到 127.0.0.1 的任何想法

可以对ServerSocket s1 = new ServerSocket(requestport) 进行任何更改吗?

【问题讨论】:

  • @Th0rndike 客户端正在通过new Socket("localhost", requestPort); 调用请求一个。 Javadoc:创建一个流套接字并将其连接到指定 IP 地址的指定端口号
  • @BackSlash 是的,你是对的 .. 就是这样
  • @BackSlash 是的。评论已删除:)

标签: java client-server


【解决方案1】:

有时 localhost 和 127.0.0.1 会出现问题
尝试在您的客户端中的 ip 可能会有效。

只是为了比使用此构造函数的 cmets 更容易看到它,您也许可以配置您的服务器:

new ServerSocket(1234,10,InetAddress.getByName("127.0.0.1"));

【讨论】:

  • 小心使用真实 IP,因为您可能需要修改路由器/调制解调器才能将消息实际发送到网络的内部地址。
  • @Sorontur:我有一堆这是问题所在。有没有办法在 127.0.0.1 上创建服务器。 API new ServerSocket(requestport) 的一些变体也包括主机名?
  • @skiwi 此服务器不会暴露给外部路由器。这种服务器-客户端通信是非常特定于localhost 的。大图的一小部分:D
  • 确定这不是最终解决方案,只是为了检查这是否是问题所在。然后你必须考虑如何让它与 localhost 一起工作,因为它也必须工作。
  • @rockstar: 是的,我多次遇到这些问题,我目前正在寻找至少解决它的代码:) 给我一些时间
【解决方案2】:

您是否尝试过检查您的防火墙?

可能是您的防火墙阻止了这些请求。 你建立连接的方式看起来很像我做的方式。但在这里可以正常工作。

【讨论】:

  • 您所说的“在这里可以正常工作”是什么意思?你试过了吗?此外,任何日志中都可以看到这种阻塞。防火墙日志会有这样的拒绝连接吗?我需要看看。
  • 我的意思是,我正在开发的应用程序具有几乎完全相同的连接方法。阻塞不会出现在日志中,因为它只是暂停它正在运行的线程。检查您的防火墙以查看 java 是否可以访问 Internet。
【解决方案3】:

一旦你有了你的套接字,你仍然需要创建一个输入和输出流来向你的服务器发送和接收数据(lol 语法)

OutputStream writer = requestsocket.getOutputStream();

BufferedReader reader = new BufferedReader(new InputStreamReader(requestsocket.getInputStream());

现在,当您想从服务器向客户端发送数据时,您可以执行以下操作:

writer.println("Data sending to client that's listening to my server");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-26
    • 1970-01-01
    • 1970-01-01
    • 2016-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多