中文字幕在线一区二区在线,久久久精品免费观看国产,无码日日模日日碰夜夜爽,天堂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

      主站蜘蛛池模板: 久久精品国产亚洲情侣| 日韩一区二区三区中文字幕| 亚洲精品国产综合久久一线| 亚洲一区二区三区精品网| 国产香蕉尹人在线视频你懂的 | 中文字幕有码在线视频| 云梦县| 99re6久精品国产首页| 亚洲一区二区三区在线中文| 国产女优一区二区三区| 亚洲精品中文字幕二区| 日本高清在线播放一区二区三区| 桃园县| 亚洲无码美韩综合| 精品国产高清a毛片| 巴林右旗| 中文字幕人妻系列一区尤物视频 | 亚洲AⅤ男人的天堂在线观看| 日韩最新av一区二区| 日韩美女av二区三区四区| 亚洲日本国产乱码va在线观看| av免费在线免费在线观看| 亚洲国产一区二区三区在观看| 国产精品无码久久久久下载| 99久久综合国产精品免费| 大连市| 无码熟妇人妻AV不卡| 亚洲精品乱码久久久久99 | 日本一区二区在线资源| 夫妻一起自拍内射小视频| 经典女同一区二区三区| 天天中文字幕av天天爽| AV熟妇导航网| 大陆老熟女露脸对白视频| 国产精品美女久久久久浪潮AVⅤ | 欧美h久免费女| 国产成人自产拍免费视频| 人妻精品久久中文字幕| 日本熟妇高潮爽视频在线观看| 丰满少妇又紧又爽视频| 亚欧免费无码AⅤ在线观看|