知识大全 Java Socket应答与HTTP服务器的瓜葛

Posted 状态

篇首语:努力尽今夕,少年犹可夸。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java Socket应答与HTTP服务器的瓜葛相关的知识,希望对你有一定的参考价值。

Java Socket应答与HTTP服务器的瓜葛  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  Java Socket应答一直伴随着我们的编程生活 在不断的发展中有很多知识需要我们学习 下面我们就先来看看有关Java <> Socket应答的代码 有点长 但是看下去就会让你豁然开朗

  HTTP/ 表示这个HTTP服务器是 版 是服务器对客户请求的应答状态码 OK是对应答状态码的解释 之后是这个文档的元信息和文档正文 (相关应答状态码和元信息的解释请参阅Inetrnet标准草案:RFC )

   Http java

   import *;

   import java io *;

   import java util Properties;

   import java util Enumeration;

   public class Http

   protected Socket client;

   protected BufferedOutputStream sender;

   protected BufferedInputStream receiver;

   protected ByteArrayInputStream byteStream;

   protected URL target;

   private int responseCode= ;

   private String responseMessage= ;

   private String serverVersion= ;

   private Properties header = new Properties();

   public Http()

   public Http(String url)

   GET(url) ;

  

   /* GET方法根据URL 会请求文件 数据库查询结果 程序运行结果等多种内容 */

   public void GET(String url)

   try

   checkHTTP(url);

   openServer(target getHost() target getPort() );

   String cmd = GET + getURLFormat(target) + HTTP/ \\r\\n

   + getBaseHeads()+ \\r\\n ;

   sendMessage(cmd);

   receiveMessage();

   catch(ProtocolException p)

   p printStackTrace();

   return;

   catch(UnknownHostException e)

   e printStackTrace();

   return;

   catch(IOException i)

   i printStackTrace();

   return;

  

  

   /*

   * HEAD方法只请求URL的元信息 不包括URL本身 若怀疑本机和服务器上的

   * 文件相同 用这个方法检查最快捷有效

   */

   public void HEAD(String url)

   try

   checkHTTP(url);

   openServer(target getHost() target getPort() );

   String cmd = HEAD +getURLFormat(target)+ HTTP/ \\r\\n

   +getBaseHeads()+ \\r\\n ;

   sendMessage(cmd);

   receiveMessage();

   catch(ProtocolException p)

   p printStackTrace();

   return;

   catch(UnknownHostException e)

   e printStackTrace();

   return;

   catch(IOException i)

   i printStackTrace();

   return;

  

  

   /*

   * POST方法是向服务器传送数据 以便服务器做出相应的处理 例如网页上常用的

   * 提交表格

   */

   public void POST(String url String content)

   try

   checkHTTP(url);

   openServer(target getHost() target getPort() );

   String cmd = POST + getURLFormat(target) + HTTP/ \\r\\n +getBaseHeads();

   cmd += Content type: application/x form urlencoded\\r\\n ;

   cmd += Content length: + content length() + \\r\\n\\r\\n ;

   cmd += content+ \\r\\n ;

   sendMessage(cmd);

   receiveMessage();

   catch(ProtocolException p)

   p printStackTrace();

   return;

   catch(UnknownHostException e)

   e printStackTrace();

   return;

   catch(IOException i)

   i printStackTrace();

   return;

  

  

   protected void checkHTTP(String url) throws ProtocolException

   try

   URL target = new URL(url);

   if(target==null || !target getProtocol() toUpperCase() equals( HTTP ) )

   throw new ProtocolException( 这不是HTTP协议 );

   this target = target;

   catch(MalformedURLException m)

   throw new ProtocolException( 协议格式错误 );

  

  

   /*

   * 与Web服务器连接 若找不到Web服务器 InetAddress会引发UnknownHostException

   * 异常 若Socket连接失败 会引发IOException异常

   */

   protected void openServer(String host int port) throws

   UnknownHostException IOException

   header clear();

   responseMessage= ; responseCode= ;

   try

   if(client!=null) closeServer();

   if(byteStream != null)

   byteStream close(); byteStream=null;

  

   InetAddress address = InetAddress getByName(host);

   client = new Socket(address port== ? :port);

   sender = new BufferedOutputStream(client getOutputStream());

   receiver = new BufferedInputStream(client getInputStream());

   catch(UnknownHostException u)

   throw u;

   catch(IOException i)

   throw i;

  

  

   /* 关闭与Web服务器的连接 */

   protected void closeServer() throws IOException

   if(client==null) return;

   try

   client close(); sender close(); receiver close();

   catch(IOException i)

   throw i;

  

   client=null; sender=null; receiver=null;

  

   protected String getURLFormat(URL target)

   String spec = //

   +target getHost();

   if(target getPort()!= )

   spec+= : +target getPort();

   return spec+=target getFile();

  

   /* 向Web服务器传送数据 */

   protected void sendMessage(String data) throws IOException

   sender write(data getBytes() data length());

   sender flush();

  

   /* 接收来自Web服务器的数据 */

   protected void receiveMessage() throws IOException

   byte data[] = new byte[ ];

   int count= ;

   int word= ;

   // 解析第一行

   while( (word=receiver read())!= )

   if(word== \\r ||word== \\n )

   word=receiver read();

   if(word== \\n ) word=receiver read();

   break;

  

   if(count == data length) data = addCapacity(data);

   data[count++]=(byte)word;

  

   String message = new String(data count);

   int mark = message indexOf( );

   serverVersion = message substring( mark);

   while( mark<message length() && message charAt(mark+ )== ) mark++;

   responseCode = Integer parseInt(message substring(mark+ mark+= ));

   responseMessage = message substring(mark message length()) trim();

   // 应答状态码和处理请读者添加

   switch(responseCode)

   case :

   throw new IOException( 错误请求 );

   case :

   throw new FileNotFoundException( getURLFormat(target) );

   case :

   throw new IOException( 服务器不可用 );

  

   if(word== ) throw new ProtocolException( 信息接收异常终止 );

   int symbol= ;

  unt= ;

   // 解析元信息

   while( word!= \\r && word!= \\n && word> )

   if(word== \\t ) word= ;

   if(count==data length) data = addCapacity(data);

   data[count++] = (byte)word;

   parseLine:

   while( (symbol=receiver read()) > )

   switch(symbol)

   case \\t :

   symbol= ; break;

   case \\r :

   case \\n :

   word = receiver read();

   if( symbol== \\r && word== \\n )

   word=receiver read();

   if(word== \\r ) word=receiver read();

  

   if( word== \\r || word== \\n || word> ) break parseLine;

   symbol= ; break;

  

   if(count==data length) data = addCapacity(data);

   data[count++] = (byte)symbol;

  

   word= ;

  

  ssage = new String(data count);

   mark = message indexOf( : );

   String key = null;

   if(mark> ) key = message substring( mark);

   mark++;

   while( mark<message length() && message charAt(mark)<= ) mark++;

   String value = message substring(mark message length() );

   header put(key value);

  unt= ;

  

   // 获得正文数据

   while( (word=receiver read())!= )

   if(count == data length) data = addCapacity(data);

   data[count++] = (byte)word;

  

   if(count> ) byteStream = new ByteArrayInputStream(data count);

   data=null;

   closeServer();

  

   public String getResponseMessage()

   return responseMessage;

  

   public int getResponseCode()

   return responseCode;

  

   public String getServerVersion()

   return serverVersion;

  

   public InputStream getInputStream()

   return byteStream;

  

   public synchronized String getHeaderKey(int i)

   if(i>=header size()) return null;

   Enumeration enum = header propertyNames();

   String key = null;

   for(int j= ; j<=i; j++)

   key = (String)enum nextElement();

   return key;

  

   public synchronized String getHeaderValue(int i)

   if(i>=header size()) return null;

   return header getProperty(getHeaderKey(i));

  

   public synchronized String getHeaderValue(String key)

   return header getProperty(key);

  

   protected String getBaseHeads()

   String inf = User Agent: myselfHttp/ \\r\\n +

   Accept: /source; text/; image/gif; */*\\r\\n ;

   return inf;

  

   private byte[] addCapacity(byte rece[])

   byte temp[] = new byte[rece length+ ];

   System arraycopy(rece temp rece length);

   return temp;

  

   public static void main(String[] args)

   Http =new Http();

   // GET(

   );

   int i;

   for (i= ; i< ; i++)

   ?modelid= );

   ?modelid= ratecontd= &MM_insert=form );

  

  

cha138/Article/program/Java/hx/201311/25854

相关参考

知识大全 Java Socket编程(三)服务器Sockets

JavaSocket编程(三)服务器Sockets  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 Java Socket多线程如何支持服务器模型

JavaSocket多线程如何支持服务器模型  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Ja

知识大全 Java Socket多线程服务端、客户端

JavaSocket多线程服务端、客户端  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  //主方

知识大全 socket 线程 思路 java

  网上参考别人的例子改自己的程序终于搞明白了原来在socket的服务器端设置线程并不是像之前想的那样建立一个连接后就重新开一个端口去监听这样的想法遇到了很多问题首先当我把客户端弄成for循环递增的链

知识大全 Java多线程Socket操作猜数游戏样例

Java多线程Socket操作猜数游戏样例  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  服务器

知识大全 java中http断点续传的原理(1)

  (一)断点续传的原理  其实断点续传的原理很简单就是在Http的请求上和一般的下载有所不同而已  打个比方浏览器请求服务器上的一个文时所发出的请求如下  假设服务器域名为文件名为downzip  

知识大全 Flex Socket与Java通讯客户端写法

FlexSocket与Java通讯客户端写法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  &l

知识大全 用java 实现一个简单的web 服务器

  importjavaioIOException;importServerSocket;importSocket;  /** *Socket+Thread+FileIO *&nb

知识大全 用Socket类实现HTTP协议客户端应用

用Socket类实现HTTP协议客户端应用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Htt

知识大全 Java Socket编程(一)Socket传输模式

JavaSocket编程(一)Socket传输模式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!