胆囊息肉

注册

 

发新话题 回复该主题

Android之Socket实例 [复制链接]

1#

Socket(套接字)是对TCP/IP协议的封装和应用,根据底层封装协议的不同,Socket的类型可以分为流套接字(streamsocket)和数据报套接字(datagramsocket)两种。流套接字将TCP作为端对端协议,提供了一个可信赖的字节流服务;数据报套接字使用UDP协议,提供数据打包发送服务,应用程序可以通过它发送最长64KB的信息。Socket的通信模型图如1-1所示。

图1-1Socket的通信模型图

通过图1-1可以很容易地看出,使用Socket进行两个应用程序之间的通信时可以选择使用TCP还是UDP作为其底层协议。对比两种方式,就会发现它们各有优劣,TCP首先连接接收方,然后发送数据,保证成功率,速度相对较慢(相比HTTP方式还是非常快的);UDP把数据打包成数据包,然后直接发送对应的IP地址,速度快,但是不保证成功率,并且数据大小有限。

一个功能齐全的Socket,都要包含以下基本结构,其工作过程包含4个基本的步骤∶创建Socket,打开连接到Socket的输入/出流,按照一定的协议对Socket进行读/写操作,关闭Socket。

Java在java.net包中提供了Socket和ServerSocket两个类,分别用来表示双向连接的客户端和服务端,是Socket编程的核心类。构造方法很多,一般情况下使用下面两种∶

Socketclient=newSocket(".0.0.1",);

ServerSocketserver=newServerSocket();

其中,Socket类用于实例化一个Client,参数分别是要访问的IP地址和端口号,这个端口号要与服务端一致。ServerSocket类用于实例化一个Server,其中的参数用来设置端口这里的端口不能与"""80"""等常用端口号冲突。

下面以基于TCP的Socket为例来讲解如何使用Socket。

使用JavaSocket创建一个服务端程序,运行在eclipse平台,并运行在PC上,然后在手机上编写客户端程序,在局域网内访问服务端。下面先编写服务端,代码如下:

packagesocket;

importjava.io.BufferedReader;

importjava.io.IOException;

importjava.io.InputStream;

importjava.io.InputStreamReader;

importjava.io.OutputStream;

importjava.net.ServerSocket;

importjava.net.Socket;

publicclasssockettest{

publicstaticvoidmain(String[]args)throwsIOException{

SuppressWarnings("resource")

ServerSocketservice=newServerSocket();

while(true){

//等待客户端连接

Socketsocket=service.accept();

newThread(newAndroidRunable(socket)).start();

}

}

}

classAndroidRunableimplementsRunnable{

Socketsocket=null;

publicAndroidRunable(Socketsocket)

{

this.socket=socket;

}

publicvoidrun(){

//向Android客户端输出hellothisis

分享 转发
TOP
发新话题 回复该主题