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

相关文章

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Pandas统计每行数据中的空值的方法示例

《Pandas统计每行数据中的空值的方法示例》处理缺失数据(NaN值)是一个非常常见的问题,本文主要介绍了Pandas统计每行数据中的空值的方法示例,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是空值?为什么要统计空值?准备工作创建示例数据统计每行空值数量进一步分析www.chinasem.cn处

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

Windows 上如果忘记了 MySQL 密码 重置密码的两种方法

《Windows上如果忘记了MySQL密码重置密码的两种方法》:本文主要介绍Windows上如果忘记了MySQL密码重置密码的两种方法,本文通过两种方法结合实例代码给大家介绍的非常详细,感... 目录方法 1:以跳过权限验证模式启动 mysql 并重置密码方法 2:使用 my.ini 文件的临时配置在 Wi

MySQL重复数据处理的七种高效方法

《MySQL重复数据处理的七种高效方法》你是不是也曾遇到过这样的烦恼:明明系统测试时一切正常,上线后却频频出现重复数据,大批量导数据时,总有那么几条不听话的记录导致整个事务莫名回滚,今天,我就跟大家分... 目录1. 重复数据插入问题分析1.1 问题本质1.2 常见场景图2. 基础解决方案:使用异常捕获3.

最详细安装 PostgreSQL方法及常见问题解决

《最详细安装PostgreSQL方法及常见问题解决》:本文主要介绍最详细安装PostgreSQL方法及常见问题解决,介绍了在Windows系统上安装PostgreSQL及Linux系统上安装Po... 目录一、在 Windows 系统上安装 PostgreSQL1. 下载 PostgreSQL 安装包2.

SQL中redo log 刷⼊磁盘的常见方法

《SQL中redolog刷⼊磁盘的常见方法》本文主要介绍了SQL中redolog刷⼊磁盘的常见方法,将redolog刷入磁盘的方法确保了数据的持久性和一致性,下面就来具体介绍一下,感兴趣的可以了解... 目录Redo Log 刷入磁盘的方法Redo Log 刷入磁盘的过程代码示例(伪代码)在数据库系统中,r

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

Android实现在线预览office文档的示例详解

《Android实现在线预览office文档的示例详解》在移动端展示在线Office文档(如Word、Excel、PPT)是一项常见需求,这篇文章为大家重点介绍了两种方案的实现方法,希望对大家有一定的... 目录一、项目概述二、相关技术知识三、实现思路3.1 方案一:WebView + Office Onl

Java中Switch Case多个条件处理方法举例

《Java中SwitchCase多个条件处理方法举例》Java中switch语句用于根据变量值执行不同代码块,适用于多个条件的处理,:本文主要介绍Java中SwitchCase多个条件处理的相... 目录前言基本语法处理多个条件示例1:合并相同代码的多个case示例2:通过字符串合并多个case进阶用法使用