作者:elle 日期:2007.09.19
上次对登入功能和面向对象的一些内容做了点小节。
这几天事情不多,早上用些时间写点最近做的一些内容。现在还是以登入功能为基础来说明手机客户端和服务器间的交互。
⇒⇒⇒
之前客户端要发送参数到服务器是通过设置请求头来实现,例如:
connection.setRequestProperty("uname",userName);
服务端接收参数如下:
String username = request.getHeader("uname");
这样就可以进行简单的交互了。
⇒⇒⇒
最近有看一些关于图片上传的资料,就做了些关于数据流传输数据的实验。现在以上次的登入功能为基础,把传递的参数改为数据流的形式进行传输。
客户端主要代码如下:
dos
=
conn.openDataOutputStream();
//
dos为DataOutputStream对象,conn为HttpConnection对象
dos.writeUTF(City); //City是一个字符串
dos.writeUTF(Road);//Road是一个字符串
dos.flush();
dos.close();
dos.writeUTF(Road);//Road是一个字符串
dos.flush();
dos.close();
对应的服务端的接收代码块为:
InputStream is
=
request.getInputStream();
DataInputStream dis = new DataInputStream(is);
OutputStream os = response.getOutputStream();
DataOutputStream dos = new DataOutputStream(os);
try ... {
String City = dis.readUTF();
String Road = dis.readUTF();
System.out.println(City + " " + Road + "******");
is.close();
dis.close();
String responseStr = "true";
dos.writeUTF(responseStr);
System.out.println(responseStr);
os.close();
dos.close();
} catch (Exception ex) ... {
ex.printStackTrace();
}
DataInputStream dis = new DataInputStream(is);
OutputStream os = response.getOutputStream();
DataOutputStream dos = new DataOutputStream(os);
try ... {
String City = dis.readUTF();
String Road = dis.readUTF();
System.out.println(City + " " + Road + "******");
is.close();
dis.close();
String responseStr = "true";
dos.writeUTF(responseStr);
System.out.println(responseStr);
os.close();
dos.close();
} catch (Exception ex) ... {
ex.printStackTrace();
}
这样客户端和服务器的通信就基本完成了,当然在实际的项目中对多媒体文件的传输要复杂的多,现在做的只是给初学者一个大的轮廓(偶也只是初学者而已,有什么说得不准的请大家多指点哈)。
这边想到一个问题,比如服务端多写个语句:String Anthor = dis.readUTF();则会出现错误。很明显,是因为客户端的输出流中并没有第三个字符串,那同一个数据流中是如何区分不同的数据,不同数据间有什么标志位呢?
这个我还不明白,有哪位有这方面的经验的还请多指教啊。
先写这么多吧,吃饭了。