Java SocketTimeoutException在准备就绪时
下面是抛出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
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上侦听的服务器进程的代码在哪里?您如何知道它返回的字节数与您发送的相同?这个问题相当不完整。