【问题标题】:Java Socket does not error but is not functional(?)Java Socket 不会出错但不能正常工作(?)
【发布时间】:2020-04-18 19:55:30
【问题描述】:

我对与拥有服务器相​​关的客户端、服务器、套接字、输入和输出流等有非常基本的了解。但是,我创建的套接字似乎不起作用。我使用了许多未使用的 ip 和端口,甚至尝试了自己计算机的 ip。我创建的 Socket 不会抛出 IOException,也不会破坏任何东西。在我的套接字对象创建之后的任何事情都不会发生。

public class ClientHello {
   public static void main(String [] args) {
      String ip = "91.202.240.208";
      int port = 51678;

    try {
        System.out.println("1");

        Socket sock = new Socket(ip, port);

       System.out.println("2");

        DataOutputStream stream1 = (DataOutputStream) sock.getOutputStream();
         stream1.writeUTF("Hi server!");

         DataInputStream stream2 = (DataInputStream) sock.getInputStream();
         System.out.println(stream2.readUTF());

        sock.close();

    }catch(IOException e) {
        e.printStackTrace();
    }

   }
}

另外,ip 和端口来自随机的乌克兰东西。

【问题讨论】:

  • Socket sock = new Socket(ip, port); 创建一个Socket 并告诉它连接 到那个ipport。为什么你认为有人在那里等待你的联系?
  • @Fureeish - 它最终应该超时并给 OP 一个例外。也许 OP 等待的时间不够长......
  • 套接字 InputStream 不是 DataInputStream,因此您的转换将在运行时产生 ClassCastException,而不是什么都不做。 DataInputStream(及其对应的 DataOutputStream 是一个非常具体的数据原语序列化协议,通常不适用,除非连接双方同意使用它,如果是这种情况,您需要包装套接字输入/output 流,而不是强制转换。
  • 你的问题没有任何意义。当我尝试连接到您的随机乌克兰主机时,而不是像您声称的那样无限期地阻塞,它会在大约 20 秒后超时。期望“随机乌克兰主机”甚至运行是没有任何意义的,更不用说说话read/writeUTF()了。使用您的自己的服务器和您自己的应用程序协议重试。

标签: java sockets server ioexception data-stream


【解决方案1】:

Socket中的IP和端口,你需要输入服务器套接字的IP地址和端口,以便它可以连接到服务器。不仅仅是一些随机的 IP 地址。

你需要先为你的服务器创建一个ServerSocket,然后是服务器的IP和端口(你可以在创建服务器套接字时指定端口,ip就是你的IP) 然后你连接到服务器的代码。

【讨论】:

    猜你喜欢
    • 2017-01-04
    • 1970-01-01
    • 2021-06-28
    • 1970-01-01
    • 2018-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多