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