⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 socketconnection.java

📁 这是远程web服务调用的一个包,可以将JSP直接作为服务
💻 JAVA
字号:
package com.meterware.pseudoserver;/******************************************************************************************************************** * $Id: SocketConnection.java,v 1.3 2003/10/17 13:58:10 russgold Exp $ * * Copyright (c) 2003, Russell Gold * * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated * documentation files (the "Software"), to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and * to permit persons to whom the Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all copies or substantial portions * of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. * *******************************************************************************************************************/import java.net.Socket;import java.net.UnknownHostException;import java.io.OutputStream;import java.io.InputStream;import java.io.IOException;import java.io.BufferedInputStream;/** * * @author <a href="mailto:russgold@httpunit.org">Russell Gold</a> **/class SocketConnection {    private Socket _socket;    private OutputStream _os;    private InputStream _is;    private String _host;    private boolean _isChunking;    public SocketConnection( String host, int port ) throws IOException, UnknownHostException {        _host = host;        _socket = new Socket( host, port );        _os = _socket.getOutputStream();        _is = new BufferedInputStream( _socket.getInputStream() );    }    void close() throws IOException {        _socket.close();    }    SocketResponse getResponse( String method, String path ) throws IOException {        if (_isChunking) throw new IllegalStateException( "May not initiate a new request while chunking." );        sendHTTPLine( method + ' ' + path + " HTTP/1.1" );        sendHTTPLine( "Host: " + _host );        sendHTTPLine( "Connection: Keep-Alive" );        sendHTTPLine( "" );        return new SocketResponse( _is );    }    SocketResponse getResponse( String method, String path, String body ) throws IOException {        if (_isChunking) throw new IllegalStateException( "May not initiate a new request while chunking." );        sendHTTPLine( method + ' ' + path + " HTTP/1.1" );        sendHTTPLine( "Host: " + _host );        sendHTTPLine( "Connection: Keep-Alive" );        sendHTTPLine( "Content-Length: " + body.length() );        sendHTTPLine( "" );        _os.write( body.getBytes() );        return new SocketResponse( _is );    }    void startChunkedResponse( String method, String path ) throws IOException {        if (_isChunking) throw new IllegalStateException( "May not initiate a new request while chunking." );        sendHTTPLine( method + ' ' + path + " HTTP/1.1" );        sendHTTPLine( "Host: " + _host );        sendHTTPLine( "Connection: Keep-Alive" );        sendHTTPLine( "Transfer-Encoding: chunked" );        sendHTTPLine( "" );        _isChunking = true;    }    public void sendChunk( String chunk ) throws IOException {        if (!_isChunking) throw new IllegalStateException( "May not send a chunk when not in mid-request." );        sendHTTPLine( Integer.toHexString( chunk.length() ));        sendHTTPLine( chunk );    }    SocketResponse getResponse() throws IOException {        if (!_isChunking) throw new IllegalStateException( "Not chunking a request." );        _isChunking = false;        sendHTTPLine( "0" );        sendHTTPLine( "" );        return new SocketResponse( _is );    }    private void sendHTTPLine( final String line ) throws IOException {        _os.write( line.getBytes() );        _os.write( 13 );        _os.write( 10 );    }    class SocketResponse extends ReceivedHttpMessage {        private String _protocol;        private int    _responseCode;        private String _message;        public SocketResponse( InputStream inputStream ) throws IOException {            super( inputStream );        }        void appendMessageHeader( StringBuffer sb ) {            sb.append( _protocol ).append( ' ' ).append( _responseCode ).append( ' ' ).append( _message );        }        void interpretMessageHeader( String messageHeader ) {            int s1 = messageHeader.indexOf( ' ' );            int s2 = messageHeader.indexOf( ' ', s1+1 );            _protocol = messageHeader.substring( 0, s1 );            _message  = messageHeader.substring( s2+1 );            try {                _responseCode = Integer.parseInt( messageHeader.substring( s1+1, s2 ) );            } catch (NumberFormatException e) {                _responseCode = -1;            }        }        public int getResponseCode() {            return _responseCode;        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -