Reputation: 1654
package WebServer;
import java.io.*;
import java.util.*;
import java.net.*;
final public class WebServer {
ServerSocket server;
public void start()throws Exception{
server=new ServerSocket(5000);
Socket client;
while(true){
client=server.accept();
Thread t1=new Thread(new Handlehttp(client));
t1.start();
}
}
public static void main(String[] args) {
try{
new WebServer().start();
}catch(Exception e){
e.printStackTrace();
}
}
}
final class Handlehttp implements Runnable{
Socket s;
DataOutputStream ds;
BufferedReader br;
public Handlehttp(Socket s) throws Exception {
this.s=s;
ds=new DataOutputStream(s.getOutputStream());
br=new BufferedReader(new InputStreamReader(s.getInputStream()));
}
private synchronized void httprequest()throws Exception{
String rqln,var;
rqln=br.readLine();
System.out.println("Port number : "+s.getPort());
if(rqln!=null)
System.out.println(rqln);
while((var=br.readLine())!=null){
System.out.println(var);
}
}
private synchronized void httpreponse()throws Exception{
String var,fileName;
fileName="D:/file.htm";
FileInputStream fis=new FileInputStream(fileName);
int var1;
var="HTTP/1.0 200 OK\r\n";
var=var+"Connection: keep-alive\r\n";
var=var+"Server : First\r\n";
var=var+"Content-Type: text/html\r\n";
var=var+"\r\n";
ds.writeBytes(var);
while((var1=fis.read())!=-1){
ds.write(var1);
}
}
@Override
public void run() {
try{
httprequest();
httpreponse();
//s.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
I get a Socket Software Error at ds.writeBytes no other Exceptions occur I guess the Socket is closed.I`m able to see HTTP Request From browser but have still no luck printing any sort info to the browser
BTW I did make a previous question regarding Multithreaded Server but since the previous problems have been solved(may be solved) have started new Question fro socket error
The Exception I get is
Port number : 10225
GET /file.htm HTTP/1.1
Host: localhost:5000
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.76 Safari/537.36
DNT: 1
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6
Port number : 10226
java.net.SocketException: Software caused connection abort: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:109)
at java.net.SocketOutputStream.write(SocketOutputStream.java:132)
at java.io.DataOutputStream.writeBytes(DataOutputStream.java:276)
at WebServer.Handlehttp.httpreponse(WebServer.java:57)
at WebServer.Handlehttp.run(WebServer.java:82)
at java.lang.Thread.run(Thread.java:722)
Upvotes: 0
Views: 2163
Reputation: 311054
readLine() returns null when the peer has closed the connection. You therefore cannot write to it afterwards (except in the case of a shutdown, which doesn't happen in HTTP). If you're implementing HTTP you need to read the HTTP RFCs to find out how to do it properly. Guesswork is not good enough. Note that the request you got was HTTP 1.1, and that it contained a Connection: keep-alive header and no Content-Length header, meaning there was no request body to read after the headers.
Upvotes: 1