一.Socket通信(不常用了)
(1)工作原理:
①服务器端serverSocke
//创建serverSocket对象,并将其绑定到给定的端口
ServerSocket ss=new ServerSocket(Int port);
//接受客户端连接
Socket socket=ss.accept();
②客户端socket
//以目标主机的IP地址和服务器打开的端口号为参数,实例化Socket类,以便连接到服务器端
Socket socket=new Socket(String dstName,int dstPort);
③二者通信--服务器端调用getOutputStream()方法得到输出流,并将信息传递给客户端;
客户端调用getInputStream()方法得到输入流,已接收服务端发送的数据信
//获得数据输出流
DataOutputStream dout=new DataOutputStream(socket.getOutputStream());
//获得输入流
DataInputStream dint=new DataInputStream(socket.getInputStream());
(2)示例
①新建一个项目serverSocketActivity,在server.java文件中的main()方法中添加如下代码
try{
//声明一个服务器端口8888
ServerSocket ss=new ServerSocket(8888);
while(true){
//打开连接,等待传入请求
Socket socket=ss.accept();
//获得数据输出流
DataOutputStream dout=new DataOutputStream(sock.getOutputStream());
//写入输出流的数据
String str="Socket通信";
//向客户端发送信息
dout.writeUTF(str);
dout.close();
socket.close();
}}catch(IOException e){
}
②新建一个项目SocketActivity,创建connectToServer()方法读取服务端发来的信息
(2-1)public void connectToServer(){
try{
//创建socket连接
Socket socket=new Socket("192.168.0.103",8888);
//获得输入流
DataInputStream din=new DataInputStream(socket.getInputStream())
//读取服务端发来的信息
String msg=din.readUTF()
//用Toast显示
Toast.makeText(SocketActivity.this,msg,Toast.LENGTH_LONG).show();
}catch(UnknownHostException e){
}
catch(IOException e){
}}
(2-2)在oncreate()方法中调用connectToServer()方法并添加如下代码,防止抛出NetworkOnMainThreadException异常
//调用connectToServer()方法
connectToServer();
//设置线程政策
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskWrites()
.detectDiskReaders()
.detectNetwork()
.penaltyLog()
.build());
//设置虚拟内存政策
StrictMode.setVmPolicy(new StrickMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects()
.detectLeakedClosableObjects()
.penaltyLog()
.penaltyDeath()
.build());
(2-3)在AndroidMenifest.xml文件中添加用户权限,运行应用程序访问网络
<uses-permission:name="android.permission.INTERNET"/>