Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SocketTimeoutException在准备就绪时_Java_Socketexception_Socket Timeout Exception - Fatal编程技术网

Java SocketTimeoutException在准备就绪时

Java SocketTimeoutException在准备就绪时,java,socketexception,socket-timeout-exception,Java,Socketexception,Socket Timeout Exception,下面是抛出SocketTimeoutException的代码 Socket socket = new Socket(localhost, 9978); socket.setSoTimeout(10000); OutputStream oStream= socket.getOutputStream(); byte[] data = new byte[] {'h', 'e', 'l', 'l', 'o'}; oStream.write(data); oStream.flush(); DataInpu

下面是抛出SocketTimeoutException的代码

Socket socket = new Socket(localhost, 9978);
socket.setSoTimeout(10000);
OutputStream oStream= socket.getOutputStream();
byte[] data = new byte[] {'h', 'e', 'l', 'l', 'o'};
oStream.write(data);
oStream.flush();
DataInputStream iStream = new DataInputStream(socket.getInputStream());
final byte[] received = new byte[data.length];
data.readFully(received);
在Readfull,我得到SocketTimeoutException。所以,我当然有错误的代码,但我不知道是什么


谢谢你的帮助。

你不一定有“错误代码”;可能您的网络连接速度慢,或者您正在与速度慢的服务器通话。请尝试更长的超时时间。或者可能服务器没有发送5个字节作为回复。

您如何知道服务器正在发送5个字节作为回复

也许试着用正常的读数看看会发生什么

即使是非常慢的服务器/网络也应该能够在10秒内处理5个字节

试试这个代码

for (int x = 0; x < 5; x++) {
  byte[] received = new byte[1];
  data.readFully(received);
  System.out.println (new String (received));
}
for(int x=0;x<5;x++){
字节[]已接收=新字节[1];
数据。已就绪(已接收);
System.out.println(新字符串(已接收));
}

@ArjunPatel在这种情况下,可能服务器根本没有发送任何内容,或者它以超过10秒的间隔发送单个字节。抛出异常时,
i
的值是多少?或者如果不方便的话,一个字节显示了多少次?@user2310289我想你指的是x的值。是0。我认为Readfull正在阻止通话。当我查看org.apache.harmony.luni.net.PlainSocketImpl的实现时,它说sint read(byte[]buffer,int offset,int count)抛出IOException{if(shutdownInput){return-1;}int read=netImpl.read(fd,buffer,offset,count);//如果(read==0){throw new SocketTimeoutException();}//如果(read==1){shutdownInput=true;}Return read;}@EJP,则返回阻塞套接字的零字节表示发生超时。谢谢您的评论。Arjun,重复EJP所说的内容-如果您没有从上述代码中获得任何输出,则服务器不会向您发送任何数据周期。您正在连接到
服务器
套接字Socket=new Socket(localhost,9978)另一个进程不向您发送任何数据。变量
localhost
是如何声明和初始化的?正在9978上侦听的服务器进程的代码在哪里?您如何知道它返回的字节数与您发送的相同?这个问题相当不完整。