SSH服务器与Android通信(3)--Android客户端发送数据

Android客户端向SSH服务器发送数据主要有三种情况:通过客户端删除数据、添加数据和修改数据。

1.删除数据

先看看jsp文件里面是怎样删除数据的:

<td align="center"><a href="clasdelete.action?id=<s:property value=‘#st.id‘/>" onclick="if(!window.confirm(‘是否删除‘))return false;" >删除</a>

也就是说,只要向服务器发出一个HTTP请求,包含clasdelete.action?id=(要删除的记录id),就可以实现记录的删除。因此,首先通过点击按钮事件获得要删除的记录的ID,然后再启动一个线程向服务器发出HTTP请求即可。

        // 点击删除按钮
        my_item.btnDel.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Var.id = my_item.txtNum.getText().toString();
                Var.type = 2;
                Var.delThread = new CommThread();
                Var.delThread.start();
            }
        });

删除数据的功能和向服务器请求数据的功能可以在一个线程类里面实现,因为它们除了请求的URL不同,其他的操作基本上都是一样的。

        // 删除数据
        else if (Var.type == 2){
            Var.strAct ="clasdelete.action?id=" + Var.id;
            Var.strURL = Var.strHost + Var.strAct;
            resIS = getIS(Var.strURL);
        }

2.添加数据

先看看在jsp文件里面是如何实现添加数据的:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>添加课程</title>
  </head>
  <body>
   <center>
     <s:form action="clas" method="post" >
     <tr>
       <td colspan="2" align="center">
         <h1><s:text name="欢迎添加课程"/></h1><br/>
         <s:property value="exception.message"/>
       </td>
     </tr>
     <s:textfield name="clas.name" key="课程名称"
       tooltip="Enter class name!" required="true"></s:textfield>
     <s:textfield name="clas.comment" key="课程介绍"
       tooltip="Enter the comment!" required="true"></s:textfield>
     <s:submit value="提交"/>
     <s:set/>
     </s:form>
   </center>
  </body>
</html>

也就是说,只要向服务器提交clas.name、clas.comment两个变量的值就可以了。在Android客户端,只能通过NameValuePair[]数组向服务器提交变量的值。新建一个线程类,把变量的名称和值放进NameValuePair[]数组,再向服务器提交就可以了。

    public void add(){

        Var.strAct = "clas";
        Var.strURL = Var.strHost + Var.strAct;
        Log.i("PostThread:", Var.strURL);
        // 建立HTTPPost连接
        HttpPost httpRequest = new HttpPost(Var.strURL);
        // 变量用NameValuePair[]数组储存
        List <NameValuePair> params = new ArrayList <NameValuePair>();
        params.add(new BasicNameValuePair("clas.name", AddActivity.txtName));
        params.add(new BasicNameValuePair("clas.comment", AddActivity.txtComm));
        try{
            // 发出HTTPRequest
            httpRequest.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
            // 取得HTTPResponse
            HttpResponse httpResponse = new DefaultHttpClient().execute(httpRequest);
            // 状态码为200表明成功
            if(httpResponse.getStatusLine().getStatusCode() == 200)
            {
                sendMessage(Var.msg_add, "");
            }
            else{
                sendMessage(Var.msg_error,httpResponse.getStatusLine().toString());
            }
        }
        // 出错处理
        catch (ClientProtocolException e){
            e.printStackTrace();
            sendMessage(Var.msg_error, e.toString());
        }
        catch (IOException e){
            e.printStackTrace();
            sendMessage(Var.msg_error,e.toString());
        }
        catch (Exception e){
            e.printStackTrace();
            sendMessage(Var.msg_error,e.toString());
        }

    }

3.修改数据

修改数据和删除数据类似,也是把变量名称和值放进NameValuePair[]数组,再向服务器提交就可以了。

    // 修改数据
    public void update(){

        Var.strAct = "clasupdate";
        Var.strURL = Var.strHost + Var.strAct;
        Log.i("PostThread:", Var.strURL);
        // 建立HTTPPost连接
        HttpPost httpRequest = new HttpPost(Var.strURL);
        // Post变量用NameValuePair[]数组储存
        List <NameValuePair> params = new ArrayList <NameValuePair>();
        params.add(new BasicNameValuePair("clas.id", UpdateActivity.txtID));
        params.add(new BasicNameValuePair("clas.name", UpdateActivity.txtName));
        params.add(new BasicNameValuePair("clas.comment", UpdateActivity.txtComm));
        try{
            // 发出HTTPRequest
            httpRequest.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
            // 取得HTTPResponse
            HttpResponse httpResponse = new DefaultHttpClient().execute(httpRequest);
            // 状态码为200表明成功
            if(httpResponse.getStatusLine().getStatusCode() == 200)
            {
                sendMessage(Var.msg_update, "");
            }
            else{
                sendMessage(Var.msg_error,httpResponse.getStatusLine().toString());
            }
        }
        // 出错处理
        catch (ClientProtocolException e){
            e.printStackTrace();
            sendMessage(Var.msg_error, e.toString());
        }
        catch (IOException e){
            e.printStackTrace();
            sendMessage(Var.msg_error,e.toString());
        }
        catch (Exception e){
            e.printStackTrace();
            sendMessage(Var.msg_error,e.toString());
        }

    }
时间: 2024-10-10 14:34:00

SSH服务器与Android通信(3)--Android客户端发送数据的相关文章

android socket 通讯(客户端) 发送数据

/** ClientSocket通讯类 **/ public class ClientSocket  { /**服务器地址*/ private String serverUrl="192.168.124.214"; /**服务器端口*/ private int serverPort=8888; /*发送命令线程*/ class sendCommandThread extends Thread{ private String command; public sendCommandThre

使用Socket通信实现Silverlight客户端实时数据的获取(模拟GPS数据,地图实时位置)

原文:使用Socket通信实现Silverlight客户端实时数据的获取(模拟GPS数据,地图实时位置) 在上一篇中说到了Silverlight下的Socket通信,在最后的时候说到本篇将会结合地图.下面就来看看本文实现的功能: Silverlight 与服务器利用Socket通讯,实时从服务器获取数据(本文中的数据是地理坐标),由于没有GPS,所以本文在服务器写了一个构造新坐标的函数(本文是一个三角函数),然后利用Timer组件,实时调用,得到新的坐标,并将新的坐标发送给客户端,客户端接收到发

uip UDP 服务器广播模式(客户端可以任意端口,并且主动向客户端发送数据)

目前移植uip,发现UDP 服务器模式下,必须指定本地端口以及客户端端口,否则只能讲客户端端口设置为0,才能接收任意端口的数据,但是无法发送数据,因为此时客户端端口设置为0了,我通过将原始数据包中的客户端端口保存下来,并且在发送的时候将客户端端口替换为指定的端口,发送完成之后又设置为0,这样就实现了向任意客户端端口发送数据. uip.c if(uip_udp_conn->lport != 0 && UDPBUF->destport == uip_udp_conn->lpo

服务器向客户端发送数据自动中断

问题现象: 客户端接收服务器端数据出现假死现象. 环境描述: 1.      客户端是window程序 2.      服务器端是Linux程序 3.      服务器端程序和客户端程序采用TCP进行通讯 问题分析: 1.      首先,客户端上进行抓包,对其数据包进行分析,发现服务器端发送的数据总是不完全 2.      其次,服务器上进行抓包,发现发送一会儿后,发送端的TCP窗口满了,导致数据溢出,发送的数据都是错误的数据包 3.      从服务器上的数据包分析发现,由于客户端处理速度过

server-sent-event使用流信息向客户端发送数据

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>server-sent-event</title> </head> <body> <div> <p>server-sent-event 是一种服务器向客户端发送消息的单向通信方式,采用流信息传送数据,类似视频播

SSH服务器与Android通信(1)--Android客户端接收数据

基本原理是Android客户端通过HttpClient向服务器发出请求,服务器向Android客户端返回JSON字符串,Android客户端解析JSON字符串获得数据. 1. 新建一个Android项目,主要文件如下: 其中MainActivity是UI,CommThread是通信线程,负责和服务器通信,Util是工具类,Var存放变量. 2. Var.java: package com.hzhi.school.util; import java.util.ArrayList; import j

Android udp json+数组 ---&gt;bytes发送数据

Android  json支持五种数据类型 String / int(float)/bool / null  / object 今天说 object  : json = new JSONObject(); json.put("cmd","put"); json.put("token",tokenJson.getString("token")); json.put("ID",jsonObject.getStr

Socket 通信原理(Android客户端和服务器以TCP&amp;&amp;UDP方式互通)

ZERO.前言 有关通信原理内容是在网上或百科整理得到,代码部分为本人所写,如果不当,还望指教. 一.Socket通信简介 Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是“请求—响应方式”,即在请求时建立连接通道,当客户端向服务器发送请求后,服务器端才能向客户端返回数据.而Socket通信则是在双方建立起连接后就可以直接进行数据的传输,在连接时可实现信息的主动推送,而不需要每次由客户端想服务器发送请求. 那么,什么是s

客户端和服务器实现全双工通信(基于线程)

http://blog.sina.com.cn/s/blog_87766e4a0100yp7a.html 1. 基于多线程实现一个服务器和一个客户端实现全双工通信 服务器端创建两个线程:一个用于接收客户端发送过来的信息:一个用来给客户端发送信息. 客户端也创建两个线程:一个用于接收服务器端发送过来的信息:一个用来给服务器端发送信息.   2. 示例代码 服务器端的代码client.c #include <sys/types.h> #include <sys/socket.h> #i