中文字幕在线一区二区在线,久久久精品免费观看国产,无码日日模日日碰夜夜爽,天堂av在线最新版在线,日韩美精品无码一本二本三本,麻豆精品三级国产国语,精品无码AⅤ片,国产区在线观看视频

      Java Socket應答與HTTP服務器的關系

      時間:2024-09-16 15:02:47 SUN認證 我要投稿
      • 相關推薦

      Java Socket應答與HTTP服務器的關系

        Java Socket應答一直伴隨著我們的編程生活,在不斷的發展中有很多知識需要我們學習。下面我們就先來看看有關Java Socket應答的代碼,有點長,但是看下去就會讓你豁然開朗。

        HTTP/1.1表示這個HTTP服務器是1.1版,200是服務器對客戶請求的應答狀態碼,OK是對應答狀態碼的解釋,之后是這個文檔的元信息和文檔正文。(相關應答狀態碼和元信息的解釋請參閱Inetrnet標準草案:RFC2616)。

        1.Http.java

        2.import java.net.*;

        3.import java.io.*;

        4.import java.util.Properties;

        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="";

        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.getPort() );

        25.String cmd = "GET "+ getURLFormat(target) +" HTTP/1.0\r\n"

        26.+ getBaseHeads()+"\r\n";

        27.sendMessage(cmd);

        28.receiveMessage();

        29.} catch(ProtocolException p) {

        30.p.printStackTrace();

        31.return;

        32.} catch(UnknownHostException e) {

        33.e.printStackTrace();

        34.return;

        35.} catch(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)+" HTTP/1.0\r\n"

        49.+getBaseHeads()+"\r\n";

        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方法是向服務器傳送數據,以便服務器做出相應的處理。例如網頁上常用的

        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.0\r\n"+getBaseHeads();

        72.cmd += "Content-type: application/x-www-form-urlencoded\r\n";

        73.cmd += "Content-length: " + content.length() + "\r\n\r\n";

        74.cmd += content+"\r\n";

        75.sendMessage(cmd);

        76.receiveMessage();

        77.}catch(ProtocolException p) {

        78.p.printStackTrace();

        79.return;

        80.}catch(UnknownHostException e) {

        81.e.printStackTrace();

        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協議");

        93.this.target = target;

        94.} catch(MalformedURLException m) {

        95.throw new ProtocolException("協議格式錯誤");

        96.}

        97.}

        98./*

        99.* 與Web服務器連接。若找不到Web服務器,InetAddress會引發UnknownHostException

        100.* 異常。若Socket連接失敗,會引發IOException異常。

        101.*/

        102.protected void openServer(String host,int port) throws

        103.UnknownHostException,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,port==-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 IOException {

        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.getPort()!=-1)

        135.spec+=":"+target.getPort();

        136.return spec+=target.getFile();

        137.}

        138./* 向Web服務器傳送數據 */

        139.protected void sendMessage(String data) throws IOException{

        140.sender.write(data.getBytes(),0,data.length());

        141.sender.flush();

        142.}

        143./* 接收來自Web服務器的數據 */

        144.protected void receiveMessage() throws IOException{

        145.byte data[] = new byte[1024];

        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 == data.length) data = addCapacity(data);

        156.data[count++]=(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( mark

        162.responseCode = Integer.parseInt(message.substring(mark+1,mark+=4));

        163.responseMessage = 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) 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.data[count++] = (byte)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.word=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.data[count++] = (byte)symbol;

        198.}

        199.word=-1;

        200.}

        201.message = 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( mark

        207.String value = message.substring(mark,message.length() );

        208.header.put(key,value);

        209.count=0;

        210.}

        211.// 獲得正文數據

        212.while( (word=receiver.read())!=-1) {

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

        214.data[count++] = (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.public 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 = header.propertyNames();

        235.String key = null;

        236.for(int j=0; j<=i; j++)

        237.key = (String)enum.nextElement();

        238.return key;

        239.}

        240.public synchronized String getHeaderValue(int i) {

        241.if(i>=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-Agent: myselfHttp/1.0\r\n"+

        249."Accept: www/source; text/html; image/gif; */*\r\n";

        250.return inf;

        251.}

        252.private byte[] addCapacity(byte rece[]){

        253.byte temp[] = new byte[rece.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.5

        260.);

        261.int i;

        262.for (i=0; i<50000; i++) {

        263.http.GET("http://www.model-dl.com/modelinfo.asp?modelid=101 );

        264.http.POST("http://www.model-dl.com/modelinfo.asp?modelid=101,"ratecontd=101&MM_insert=form1 ");

        265.}

        266.}

        267.}

      【Java Socket應答與HTTP服務器的關系】相關文章:

      java實現web服務器的方法10-14

      PHP socket的配置08-04

      高防服務器與秒解服務器有什么關系07-06

      PHP中如何使用socket進行通信08-21

      Java與Java web的區別08-10

      2017職稱英語應答技巧09-13

      面試口才方面的應答妙招09-04

      電話客服常見的英語應答語05-11

      ibm服務器優勢11-04

      安裝Web服務器07-16

      主站蜘蛛池模板: 一区二区三区四区在线观看视频| 国产精品人成在线观看| 金溪县| 福利片免费 亚洲| 亚洲一区二区免费日韩| 桂东县| 国产成人精品一区二免费网站| 国产熟女自拍视频网站| 国产亚洲精品综合91| 聂拉木县| 亚洲中文字幕乱码一二三区| 日本精品久久久久中文字幕1| 亚洲精品一区二区三区av| 德江县| 中文字幕麻豆一区二区| 国产精品白浆一区二区三区| 99riav精品国产| 亚洲成av人片在线播放| 久久99亚洲网美利坚合众国| 永泰县| 国产成年无码久久久久下载| 久国产精品久久精品国产四虎| 日韩精品视频在线一二三| 日本少妇视频一区二区三区| 综合激情中文字幕一区二区| 国产精品亚洲一区二区极品| 国产不卡一区二区av| 眉山市| 郓城县| 龙岩市| 精品亚洲人伦一区二区三区| aⅴ色综合久久天堂av色综合| 富阳市| 亚洲成人av一区二区三区| 久久久一本精品99久久| 吴桥县| 国产精品亚洲综合色区丝瓜| 蜜桃在线播放免费一区二区三区| 国产成品精品午夜视频| 亚洲先锋影院一区二区| 成美女黄网站18禁免费|