ClientA.java
    Server.java
    Android网络编程几大方法

    HttpURLConnection、HttpClient都是使用HTTP协议,是B/S模式。Socket是C/S模型

    HttpURLConnection方法

    这是JAVA本身提供的。

    首先需要明确,Http通信中POST和GET请求方式的不同。

    GET可以获得静态页面(即不需要传递参数的页面),也可以吧参数放在URL字符串之后,

    POST参数只能放在HTTP请求。

    创建链接方法:

    对请求的属性进行一些设置:

    在Manifest文件中,设置网络访问权限:

    HttpURLConection默认使用的是GET方式。

    Get方法使用如下:

    //打开连接

    HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();

    //得到读取的内容(流)

    InputStreamReader in = new InputStreamReader(urlConn.getInputStream());

    // 为输出创建BufferedReader

    BufferedReader buffer = new BufferedReader(in);

    String inputLine = null;

    //使用循环来读取获得的数据

    while (((inputLine = buffer.readLine()) != null))

    {

    //我们在每一行后面加上一个”\n”来换行

    resultData += inputLine + “\n”;

    }

    //关闭InputStreamReader

    in.close();

    //关闭http连接

    urlConn.disconnect();

    POST方法使用如下:

    概括为:

    openConnection()建立连接,

    set*设置参数,

    发送请求getOutputStream.wrteBytes(String)发送请求,

    获取请求结果getInputStream.readBytes()

    // 使用HttpURLConnection打开连接

    HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();

    //设置参数,因为这个是post请求,设立需要设置为true

    urlConn.setDoOutput(true);

    urlConn.setDoInput(true);

    // 设置以POST方式

    urlConn.setRequestMethod(“POST”);

    // Post 请求不能使用缓存

    urlConn.setUseCaches(false);

    urlConn.setInstanceFollowRedirects(true);

    // 配置本次连接的Content-type,配置为application/x-www-form-urlencoded的 urlConn.setRequestProperty(“Content-Type”,”application/x-www-form-urlencoded”);

    // 连接,从postUrl.openConnection()至此的配置必须要在connect之前完成,

    // 要注意的是connection.getOutputStream会隐含的进行connect。

    urlConn.connect();

    //DataOutputStream流

    DataOutputStream out = new DataOutputStream(urlConn.getOutputStream());

    //要上传的参数

    String content = “par=” + URLEncoder.encode(“ABCDEFG”, “gb2312”);

    //将要上传的内容写入流中

    out.writeBytes(content);

    //刷新、关闭

    out.flush();

    out.close();

    //获取数据

    BufferedReader reader = new BufferedReader(new InputStreamReader(urlConn.getInputStream()));

    HttpClient

    是Apache的一个开源子项目,对JAVA网络操作相关的方法进行了封装,使网络操作更加简单。

    GET方法(HttpClient.execute(HttpGet))

    String httpUrl = “http://192.168.1.110:8080/httpget.jsp?par=HttpClient_android_Get“;

    //HttpGet连接对象

    HttpGet httpRequest = new HttpGet(httpUrl);

    try

    {

    //取得HttpClient对象

    HttpClient httpclient = new DefaultHttpClient();

    //请求HttpClient,取得HttpResponse

    HttpResponse httpResponse = httpclient.execute(httpRequest);

    //请求成功

    if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK)

    {

    //取得返回的字符串

    String strResult = EntityUtils.toString(httpResponse.getEntity());

    mTextView.setText(strResult);

    }

    POST方法

    使用NameValuePair保存参数,还需要设置字符集。

    //新建一个HttpPost

    new HttpPost(url);

    //准备好参数

    List.add(new BasicNameValuePair(key,Stringparam));

    //设置字符集

    HttpEntity = new UrlEncodeFormEntity(List,”gb2312”);

    //加入httpPost中

    HttpPost.setEntity(HttpEntity)

    //发送HttpPost请求。

    HttpClient.execute(HttpPost);

    Socket

    Socket正如其英文原意那样,象一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电, 有的提供110伏交流电,有的则提供有线电视节目。 客户软件将插头插到不同编号的插座,就可以得到不同的服务。

    //服务端

    public class SocketServer {

    // 服务端口类引用

    private static ServerSocket mServer;

    private static boolean flag = true;

    public static void main(String[] args) {

    try {

    // 创建服务端及端口

    mServer = new ServerSocket(8888);

    System.out.println(“正在监听8888端口….”);

    while(flag) {

    // 创建Socket对象 监听服务端端口的访问

    Socket socket = mServer.accept();

    // 双向流创建

    DataInputStream dis=new DataInputStream(socket.getInputStream());

    DataOutputStream dos = new DataOutputStream(socket.getOutputStream());

    System.out.println(“客户端信息:”+ dis.readUTF());// 读取客户端请求

    dos.writeUTF(“成功连接到服务器!”);

    dis.close();// 关闭输入输出流及端口

    dos.close();

    socket.close();

    }

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    }

    客户端

    private void connectToServer() {

    String serverIP = “192.168.1.6”;// 本机的IP设定

    try {

    Socket socket = new Socket(serverIP,8888);// 创建Socket套接字 并发出连接请求

    DataInputStream dis = new DataInputStream(socket.getInputStream());// 双向流创建

    DataOutputStream dos = new DataOutputStream(socket.getOutputStream());

    String strInput = connectEdt.getText().toString();// 获取发送到服务端的信息

    dos.writeUTF(strInput);// 写信息到输出流

    connectText.setText(dis.readUTF()); // 从输入流中获得信息

    dis.close();

    dos.close();

    socket.close();

    } catch (UnknownHostException e) {

    e.printStackTrace();

    } catch (IOException e) {

    e.printStackTrace();

    }

    }