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

📄 httpposter.java

📁 kjava编写的手机联网程序 客户端和服务器的演示代码
💻 JAVA
字号:
package example.sum;

import java.io.*;
import java.util.*;
import javax.microedition.io.*;

public class HttpPoster
    implements Runnable
{
    private String url;
    private volatile boolean aborting = false;
    private Vector requestQueue = new Vector();
    private Vector listenerQueue = new Vector();

    public HttpPoster(String url)
    {
    	this.url = url;
    	Thread thread = new Thread(this);
    	thread.start();
    }

    public synchronized void sendRequest(String request,
                                         HttpPosterListener listener)
        throws IOException
    {
    	requestQueue.addElement(request);
    	listenerQueue.addElement(listener);
    	notify(); // wake up sending thread
    }

    public void run()
    {
running:
        while (!aborting)
        {
            String request;
            HttpPosterListener listener;

            synchronized (this)
            {
            	while (requestQueue.size() == 0)
            	{
            	    try
            	    {
            	    	wait(); // releases lock
            	    }
            	    catch (InterruptedException e)
            	    {
            	    }
            	    if (aborting)
            	        break running;
            	}
            	request = (String)(requestQueue.elementAt(0));
            	listener = (HttpPosterListener)(listenerQueue.elementAt(0));
            	requestQueue.removeElementAt(0);
            	listenerQueue.removeElementAt(0);
            }
            // sendRequest must have notified us
            doSend(request, listener);
        }
    }

    private void doSend(String request,
                        HttpPosterListener listener)
    {
    	HttpConnection conn = null;
    	InputStream in = null;
    	OutputStream out = null;
    	String responseStr = null;
    	String errorStr = null;
    	boolean wasError = false;

    	try
    	{
            conn = (HttpConnection)Connector.open(url);
            // Set the request method
            conn.setRequestMethod(HttpConnection.POST);
            //conn.setRequestProperty("Content-Length",
            //    Integer.toString(request.length()));
            // Getting the output stream may flush the headers
/*
            out = conn.openOutputStream();
            int requestLength = request.length();
            for (int i = 0; i < requestLength; ++i)
            {
            	out.write(request.charAt(i));
            }
*/
            out = conn.openDataOutputStream();

            out.write(request.getBytes());
/*
            // Opening the InputStream will open the connection
            // and read the HTTP headers. They are stored until
            // requested.
            in = conn.openInputStream();
            // Get the length and process the data
            StringBuffer responseBuf;
            long length = conn.getLength();
            if (length > 0)
            {
            	responseBuf = new StringBuffer((int)length);
            }
            else
            {
            	responseBuf = new StringBuffer(); // default length
            }
            int ch;
            while ((ch = in.read()) != -1)
            {
            	responseBuf.append((char)ch);
            }
            responseStr = responseBuf.toString();
*/

            in = conn.openDataInputStream();
            //in = conn.openInputStream();
            int responseCode = conn.getResponseCode();
            if (responseCode != 200)
            {
                throw new IOException("Network error: " + responseCode);
            }

            int length = (int) conn.getLength();

            StringBuffer responseBuf;
            byte[] btin = null;
            if (length > 0)
            {
                responseBuf = new StringBuffer(length);
                btin = new byte[length];
            }
            else
            {
                responseBuf = new StringBuffer(); // default length
                btin = new byte[128];
            }

            int len = 0;
            int chx;
            while ( (chx = in.read()) != -1)
            {
                responseBuf.append((char)chx);
                btin[len] = (byte) chx;
                len++;
            }

            responseStr = new String(btin, 0, len);
            //responseStr = responseBuf.toString() + " len= " + len;

            // support URL rewriting for session handling
            String rewrittenUrl = conn.getHeaderField("X-RewrittenURL");
            if (rewrittenUrl != null)
            {
            	url = rewrittenUrl; // use this new one in future
            }
        }
        catch (IOException e)
        {
            wasError = true;
            errorStr = e.getMessage();
        }
        finally
        {
            if (in != null)
            {
            	try
            	{
            	    in.close();
            	}
            	catch (IOException e)
            	{
                }
            }
            if (out != null)
            {
            	try
            	{
            	    out.close();
            	}
            	catch (IOException e)
            	{
            	}
            }
            if (conn != null)
            {
            	try
            	{
            	    conn.close();
            	}
            	catch (IOException e)
            	{
            	}
            }
        }
        if (wasError)
        {
            listener.handleHttpError(errorStr);
        }
        else
        {
            listener.receiveHttpResponse(responseStr);
        }
    }

    // This is just for tidying up - the instance is useless after it has
    // been called
    public void abort()
    {
    	aborting = true;
    	synchronized (this)
    	{
    	    notify(); // wake up our posting thread and kill it
    	}
    }
}

⌨️ 快捷键说明

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