Android与服务器通信的方法之一(TCP)效率高安全性完善

2024-06-07 00:48

本文主要是介绍Android与服务器通信的方法之一(TCP)效率高安全性完善,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


Android与服务器通信的方法之一(TCP)效率高安全性完善

客户端代码: 
Java代码  

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
package com.yarin.android.Examples_08_04;  
   
import java.io.BufferedReader;  
import java.io.BufferedWriter;  
import java.io.InputStreamReader;  
import java.io.OutputStreamWriter;  
import java.io.PrintWriter;  
import java.net.InetAddress;  
import java.net.Socket;  
import android.app.Activity;  
import android.os.Bundle;  
import android.util.Log;  
import android.view.View;  
import android.view.View.OnClickListener;  
import android.widget.Button;  
import android.widget.EditText;  
import android.widget.TextView;  
   
public class Activity01  extends Activity  
{  
     private final String        DEBUG_TAG   =  "Activity01" ;  
        
     private TextView    mTextView= null ;  
     private EditText    mEditText= null ;  
     private Button      mButton= null ;  
       
     @Override 
     public void onCreate(Bundle savedInstanceState)  
     {  
         super .onCreate(savedInstanceState);  
         setContentView(R.layout.main);  
            
         mButton = (Button)findViewById(R.id.Button01);  
         mTextView=(TextView)findViewById(R.id.TextView01);  
         mEditText=(EditText)findViewById(R.id.EditText01);  
            
         //登陆  
         mButton.setOnClickListener( new OnClickListener()  
         {  
             public void onClick(View v)  
             {  
                 Socket socket =  null ;  
                 String message = mEditText.getText().toString() +  "\r\n" ;   
                 try   
                 {     
                     //创建Socket  
                     socket =  new Socket( "116.29.27.138" , 5554 );  //查看本机IP,每次开机都不同  
                     //socket=new Socket("192.168.1.110",50000);  
                     //向服务器发送消息  
                     PrintWriter out =  new PrintWriter(  new BufferedWriter(  new OutputStreamWriter(socket.getOutputStream())), true );        
                     out.println(message);   
                        
                     //接收来自服务器的消息  
                     BufferedReader br =  new BufferedReader( new InputStreamReader(socket.getInputStream()));   
                     String msg = br.readLine();   
                        
                     if ( msg !=  null )  
                     {  
                         mTextView.setText(msg);  
                     }  
                     else 
                     {  
                         mTextView.setText( "数据错误!" );  
                     }  
                     //关闭流  
                     out.close();  
                     br.close();  
                     //关闭Socket  
                     socket.close();   
                 }  
                 catch (Exception e)   
                 {  
                     // TODO: handle exception  
                     Log.e(DEBUG_TAG, e.toString());  
                 }  
             }  
         });  
     }  
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class Activity01  extends Activity
{
private final String DEBUG_TAG =  "Activity01" ;
private TextView mTextView= null ;
private EditText mEditText= null ;
private Button mButton= null ;
  
@Override
public void onCreate(Bundle savedInstanceState)
{
super .onCreate(savedInstanceState);
setContentView(R.layout.main);
mButton = (Button)findViewById(R.id.Button01);
mTextView=(TextView)findViewById(R.id.TextView01);
mEditText=(EditText)findViewById(R.id.EditText01);
//登陆
mButton.setOnClickListener( new OnClickListener()
{
public void onClick(View v)
{
Socket socket =  null ;
String message = mEditText.getText().toString() +  "\r\n" ;
try
{
//创建Socket
socket =  new Socket( "116.29.27.138" , 5554 );  //查看本机IP,每次开机都不同
//socket=new Socket("192.168.1.110",50000);
//向服务器发送消息
PrintWriter out =  new PrintWriter(  new BufferedWriter(  new OutputStreamWriter(socket.getOutputStream())), true );     
out.println(message);
//接收来自服务器的消息
BufferedReader br =  new BufferedReader( new InputStreamReader(socket.getInputStream()));
String msg = br.readLine();
if ( msg !=  null )
{
mTextView.setText(msg);
}
else
{
mTextView.setText( "数据错误!" );
}
//关闭流
out.close();
br.close();
//关闭Socket
socket.close();
}
catch (Exception e)
{
// TODO: handle exception
Log.e(DEBUG_TAG, e.toString());
}
}
});
}
}
服务器端代码:
Java代码 
package com.yarin.android.Examples_08_04;  
   
import java.io.BufferedReader;  
import java.io.BufferedWriter;  
import java.io.InputStreamReader;  
import java.io.OutputStreamWriter;  
import java.io.PrintWriter;  
import java.net.ServerSocket;  
import java.net.Socket;  
   
public class Server  implements Runnable  
{  
     public void run()  
     {  
         try 
         {  
             //创建ServerSocket  
             ServerSocket serverSocket =  new ServerSocket( 5554 );  
             while ( true )  
             {  
                 //接受客户端请求  
                 Socket client = serverSocket.accept();  
                 System.out.println( "accept" );  
                 try 
                 {  
                     //接收客户端消息  
                     BufferedReader in =  new BufferedReader( new InputStreamReader(client.getInputStream()));  
                     String str = in.readLine();  
                     System.out.println( "read:" + str);    
                     //向服务器发送消息  
                     PrintWriter out =  new PrintWriter(  new BufferedWriter(  new OutputStreamWriter(client.getOutputStream())), true );        
                     out.println( "server message" );   
                     //关闭流  
                     out.close();  
                     in.close();  
                 }  
                 catch (Exception e)  
                 {  
                     System.out.println(e.getMessage());  
                     e.printStackTrace();  
                 }  
                 finally 
                 {  
                     //关闭  
                     client.close();  
                     System.out.println( "close" );  
                 }  
             }  
         }  
         catch (Exception e)  
         {  
             System.out.println(e.getMessage());  
         }  
     }  
     //main函数,开启服务器  
     public static void main(String a[])  
     {  
         Thread desktopServerThread =  new Thread( new Server());  
         desktopServerThread.start();  
     }  
}

这篇关于Android与服务器通信的方法之一(TCP)效率高安全性完善的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1037708

相关文章

Python安装Pandas库的两种方法

《Python安装Pandas库的两种方法》本文介绍了三种安装PythonPandas库的方法,通过cmd命令行安装并解决版本冲突,手动下载whl文件安装,更换国内镜像源加速下载,最后建议用pipli... 目录方法一:cmd命令行执行pip install pandas方法二:找到pandas下载库,然后

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

Python极速搭建局域网文件共享服务器完整指南

《Python极速搭建局域网文件共享服务器完整指南》在办公室或家庭局域网中快速共享文件时,许多人会选择第三方工具或云存储服务,但这些方案往往存在隐私泄露风险或需要复杂配置,下面我们就来看看如何使用Py... 目录一、android基础版:HTTP文件共享的魔法命令1. 一行代码启动HTTP服务器2. 关键参

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

SQL Server安装时候没有中文选项的解决方法

《SQLServer安装时候没有中文选项的解决方法》用户安装SQLServer时界面全英文,无中文选项,通过修改安装设置中的国家或地区为中文中国,重启安装程序后界面恢复中文,解决了问题,对SQLSe... 你是不是在安装SQL Server时候发现安装界面和别人不同,并且无论如何都没有中文选项?这个问题也

Java Thread中join方法使用举例详解

《JavaThread中join方法使用举例详解》JavaThread中join()方法主要是让调用改方法的thread完成run方法里面的东西后,在执行join()方法后面的代码,这篇文章主要介绍... 目录前言1.join()方法的定义和作用2.join()方法的三个重载版本3.join()方法的工作原

在MySQL中实现冷热数据分离的方法及使用场景底层原理解析

《在MySQL中实现冷热数据分离的方法及使用场景底层原理解析》MySQL冷热数据分离通过分表/分区策略、数据归档和索引优化,将频繁访问的热数据与冷数据分开存储,提升查询效率并降低存储成本,适用于高并发... 目录实现冷热数据分离1. 分表策略2. 使用分区表3. 数据归档与迁移在mysql中实现冷热数据分

Spring Boot从main方法到内嵌Tomcat的全过程(自动化流程)

《SpringBoot从main方法到内嵌Tomcat的全过程(自动化流程)》SpringBoot启动始于main方法,创建SpringApplication实例,初始化上下文,准备环境,刷新容器并... 目录1. 入口:main方法2. SpringApplication初始化2.1 构造阶段3. 运行阶

Olingo分析和实践之ODataImpl详细分析(重要方法详解)

《Olingo分析和实践之ODataImpl详细分析(重要方法详解)》ODataImpl.java是ApacheOlingoOData框架的核心工厂类,负责创建序列化器、反序列化器和处理器等组件,... 目录概述主要职责类结构与继承关系核心功能分析1. 序列化器管理2. 反序列化器管理3. 处理器管理重要方

Python错误AttributeError: 'NoneType' object has no attribute问题的彻底解决方法

《Python错误AttributeError:NoneTypeobjecthasnoattribute问题的彻底解决方法》在Python项目开发和调试过程中,经常会碰到这样一个异常信息... 目录问题背景与概述错误解读:AttributeError: 'NoneType' object has no at