今天写了个程序,观看HTTP上传文件的流格式,发现:
DataInputSteam的 readFully(byte b[ ] )方法,当不能完全填充b[ ]时, 会阻塞程序的执行,直到读到足够的数据为止,
程序才继续执行下去!
代码:
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class HttpServer extends Thread ...{
private int SERVER_PORT=3221;
private ServerSocket s=null;
public HttpServer() throws IOException...{
s=new ServerSocket(SERVER_PORT);
}
public HttpServer(int SERVER_PORT) throws IOException...{
this.SERVER_PORT=SERVER_PORT;
s=new ServerSocket(SERVER_PORT);
}

public void run()...{
try ...{

while(true)...{
Socket socket=s.accept();
System.out.println("响应客户端:"+System.currentTimeMillis());
new Answer2Client(socket).start();
}

} catch (IOException e) ...{
System.out.println("HttpServer-->run()方法中出错");
e.printStackTrace();
}
}

public static void main(String sssp[]) throws Exception...{
HttpServer server=null;
if(sssp.length!=0)
server=new HttpServer(Integer.parseInt(sssp[0]));
else
server=new HttpServer();
server.start();
}
}
class Answer2Client extends Thread...{
private Socket client=null;
private byte[] b=new byte[10240];
public Answer2Client(Socket ss)...{
this.client=ss;
}

public void run()...{
try ...{
BufferedReader datain=new BufferedReader(new InputStreamReader(client.getInputStream()));
while(true)...{
// datain.readFully(b);
String line=datain.readLine();
if(line==null)break;
System.out.println(line);
}//while
System.out.println(" 结--------束");

}catch(IOException e) ...{
System.out.print(" 结束");
e.printStackTrace();
}
//响应
DataOutputStream dataout;
try ...{
dataout = new DataOutputStream(client.getOutputStream());
String time=System.currentTimeMillis()+" 时间time";
dataout.writeChars("<html>"+time+"</html>");
dataout.flush();
dataout.close();
client.shutdownOutput();
client.shutdownInput();
client.close();

} catch (IOException e) ...{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
程序不能正长结束,不知道怎么关闭套界字,和流
本文介绍了一个简单的HTTP服务器程序实现,重点探讨了DataInputStream的readFully方法特性及其对程序执行的影响。通过具体代码示例,展示了如何接收并处理HTTP请求。
2941

被折叠的 条评论
为什么被折叠?



