Java Socket应答与HTTP服务器的关系.docx

上传人:scccc 文档编号:12747545 上传时间:2021-12-05 格式:DOCX 页数:14 大小:22.19KB
返回 下载 相关 举报
Java Socket应答与HTTP服务器的关系.docx_第1页
第1页 / 共14页
Java Socket应答与HTTP服务器的关系.docx_第2页
第2页 / 共14页
Java Socket应答与HTTP服务器的关系.docx_第3页
第3页 / 共14页
Java Socket应答与HTTP服务器的关系.docx_第4页
第4页 / 共14页
Java Socket应答与HTTP服务器的关系.docx_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《Java Socket应答与HTTP服务器的关系.docx》由会员分享,可在线阅读,更多相关《Java Socket应答与HTTP服务器的关系.docx(14页珍藏版)》请在三一文库上搜索。

1、Java Socket应答与HTTP服务器的关系 Java Socket应答一直伴随着我们的编程生活,在不断的发展中有很多知识需要我们学习。下面我们就先来看看有关Java Socket应答的代码,有点长,但是看下去就会让你豁然开朗。 HTTP/1.1表示这个HTTP服务器是1.1版,200是服务器对客户请求的应答状态码,OK是对应答状态码的解释,之后是这个文档的元信息和文档正文。(相关应答状态码和元信息的解释请参阅Inetrnet标准草案:RFC2616)。1.Http.java2.import .*;3.import java.io.*;4.import java.util.Properti

2、es;5.import java.util.Enumeration;6.public class Http 7.protected Socket client;8.protected BufferedOutputStream sender;9.protected BufferedInputStream receiver;10.protected ByteArrayInputStream byteStream;11.protected URL target;12.private int responseCode=-1;13.private String responseMessage="

3、;"14.private String serverVersion=""15.private Properties header = new Properties();16.public Http() 17.public Http(String url) 18.GET(url) ;19.20./* GET方法根据URL,会请求文件、数据库查询结果、程序运行结果等多种内容 */21.public void GET(String url) 22.try 23.checkHTTP(url);24.openServer(target.getHost(),target.ge

4、tPort() );25.String cmd = "GET "+ getURLFormat(target) +" HTTP/1.0rn"26.+ getBaseHeads()+"rn"27.sendMessage(cmd);28.receiveMessage();29. catch(ProtocolException p) 30.p.printStackTrace();31.return;32. catch(UnknownHostException e) 33.e.printStackTrace();34.return;35. ca

5、tch(IOException i) 36.i.printStackTrace();37.return;38.39.40./*41.* HEAD方法只请求URL的元信息,不包括URL本身。若怀疑本机和服务器上的42.* 文件相同,用这个方法检查最快捷有效。43.*/44.public void HEAD(String url) 45.try 46.checkHTTP(url);47.openServer(target.getHost(),target.getPort() );48.String cmd = "HEAD "+getURLFormat(target)+"

6、; HTTP/1.0rn"49.+getBaseHeads()+"rn"50.sendMessage(cmd);51.receiveMessage();52.catch(ProtocolException p) 53.p.printStackTrace();54.return;55.catch(UnknownHostException e) 56.e.printStackTrace();57.return;58.catch(IOException i) 59.i.printStackTrace();60.return;61.62.63./*64.* POST方法是

7、向服务器传送数据,以便服务器做出相应的处理。例如网页上常用的65.* 提交表格。66.*/67.public void POST(String url,String content) 68.try 69.checkHTTP(url);70.openServer(target.getHost(),target.getPort() );71.String cmd = "POST "+ getURLFormat(target) +"HTTP/1.0rn"+getBaseHeads();72.cmd += "Content-type: applicat

8、ion/x-www-form-urlencodedrn"73.cmd += "Content-length: " + content.length() + "rnrn"74.cmd += content+"rn"75.sendMessage(cmd);76.receiveMessage();77.catch(ProtocolException p) 78.p.printStackTrace();79.return;80.catch(UnknownHostException e) 81.e.printStackTrace();

9、82.return;83.catch(IOException i) 84.i.printStackTrace();85.return;86.87.88.protected void checkHTTP(String url) throws ProtocolException 89.try 90.URL target = new URL(url);91.if(target=null | !target.getProtocol().toUpperCase().equals("HTTP") )92.throw new ProtocolException("这不是HTTP

10、协议");93.this.target = target;94. catch(MalformedURLException m) 95.throw new ProtocolException("协议格式错误");96.97.98./*99.* 与Web服务器连接。若找不到Web服务器,InetAddress会引发UnknownHostException100.* 异常。若Socket连接失败,会引发IOException异常。101.*/102.protected void openServer(String host,int port) throws103.Unk

11、nownHostException,IOException 104.header.clear();105.responseMessage="" responseCode=-1;106.try 107.if(client!=null) closeServer();108.if(byteStream != null) 109.byteStream.close(); byteStream=null;110.111.InetAddress address = InetAddress.getByName(host);112.client = new Socket(address,po

12、rt=-1?80:port);113.sender = new BufferedOutputStream(client.getOutputStream();114.receiver = new BufferedInputStream(client.getInputStream();115.catch(UnknownHostException u) 116.throw u;117.catch(IOException i) 118.throw i;119.120.121./* 关闭与Web服务器的连接 */122.protected void closeServer() throws IOExce

13、ption 123.if(client=null) return;124.try 125.client.close(); sender.close(); receiver.close();126. catch(IOException i) 127.throw i;128.129.client=null; sender=null; receiver=null;130.131.protected String getURLFormat(URL target) 132.String spec = "http:/133.+target.getHost();134.if(target.getP

14、ort()!=-1)135.spec+=":"+target.getPort();136.return spec+=target.getFile();137.138./* 向Web服务器传送数据 */139.protected void sendMessage(String data) throws IOException140.sender.write(data.getBytes(),0,data.length();141.sender.flush();142.143./* 接收来自Web服务器的数据 */144.protected void receiveMessage

15、() throws IOException145.byte data = new byte1024;146.int count=0;147.int word=-1;148./ 解析第一行149.while( (word=receiver.read()!=-1 ) 150.if(word='r'|word='n') 151.word=receiver.read();152.if(word='n') word=receiver.read();153.break;154.155.if(count = da

16、ta.length) data = addCapacity(data);156.datacount+=(byte)word;157.158.String message = new String(data,0,count);159.int mark = message.indexOf(32);160.serverVersion = message.substring(0,mark);161.while( mark162.responseCode = Integer.parseInt(message.substring(mark+1,mark+=4);163.responseMessage =

17、message.substring(mark,message.length().trim();164./ 应答状态码和处理请读者添加165.switch(responseCode) 166.case 400:167.throw new IOException("错误请求");168.case 404:169.throw new FileNotFoundException( getURLFormat(target) );170.case 503:171.throw new IOException("服务器不可用" );172.173.if(word=-1)

18、 throw new ProtocolException("信息接收异常终止");174.int symbol=-1;175.count=0;176./ 解析元信息177.while( word!='r' && word!='n' && word>-1) 178.if(word='t') word=32;179.if(count=data.length) data = addCapacity(data);180.datacount+ = (b

19、yte)word;181.parseLine: 182.while( (symbol=receiver.read() >-1 ) 183.switch(symbol) 184.case 't':185.symbol=32; break;186.case 'r':187.case 'n':188.word = receiver.read();189.if( symbol='r' && word='n') 190.wo

20、rd=receiver.read();191.if(word='r') word=receiver.read();192.193.if( word='r' | word='n' | word>32) break parseLine;194.symbol=32; break;195.196.if(count=data.length) data = addCapacity(data);197.datacount+ = (byte)symbol;198.199.word=-1;200.201.mes

21、sage = new String(data,0,count);202.mark = message.indexOf(':');203.String key = null;204.if(mark>0) key = message.substring(0,mark);205.mark+;206.while( mark207.String value = message.substring(mark,message.length() );208.header.put(key,value);209.count=0;210.211./ 获得正文数据212.whil

22、e( (word=receiver.read()!=-1) 213.if(count = data.length) data = addCapacity(data);214.datacount+ = (byte)word;215.216.if(count>0) byteStream = new ByteArrayInputStream(data,0,count);217.data=null;218.closeServer();219.220.public String getResponseMessage() 221.return responseMessage;222.223.publ

23、ic int getResponseCode() 224.return responseCode;225.226.public String getServerVersion() 227.return serverVersion;228.229.public InputStream getInputStream() 230.return byteStream;231.232.public synchronized String getHeaderKey(int i) 233.if(i>=header.size() return null;234.Enumeration enum = he

24、ader.propertyNames();235.String key = null;236.for(int j=0; j=header.size() return null;242.return header.getProperty(getHeaderKey(i);243.244.public synchronized String getHeaderValue(String key) 245.return header.getProperty(key);246.247.protected String getBaseHeads() 248.String inf = "User-A

25、gent: myselfHttp/1.0rn"+249."Accept: www/source; text/html; image/gif; */*rn"250.return inf;251.252.private byte addCapacity(byte rece)253.byte temp = new byterece.length+1024;254.System.arraycopy(rece,0,temp,0,rece.length);255.return temp;256.257.public static void main(String args) 258.Http http=new Http();259./http.GET("http:/192.168.1.5260.);261.int i;262.for (i=0; i<50000; i+) 263.http.GET("http:/www.model- );264.http.POST("http:/www.model- ");265.266.267.第 14 页 共 14 页免责声明:图文来源于网络搜集,版权归原作者所以若侵犯了您的合法权益,请作者与本上传人联系,我们将及时更正删除。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1