Android作为客户端,PC作为服务端:实现网络通信

ADB 原理(第二篇:证实adb client与adb server进程之间的通信) 0、终于到了原理探究与源码分析阶段了,很开心,Google大牛制作了Adb工具,非常方便 1、先把这张好图,拿过来,画的真不错呀 2、又一张好图 3、ADB演绎了一个进程间通信,绝妙场景,为啥我的进程占据的端口是18?? 4、 参考文章:·Android ADB 源码分析总结https://blog.youkuaiyun.com/mediatec/article... 阅读详情

目录(?)[+]

此项目实现网络通信,android手机客户端去请求PC服务端,将PC上mysql中的数据显示在手机上。

   PC服务端用JavaWeb写了个servlet,android手机客户端请求这个servlet,由servlet执行查询数据,并返回给手机客户端,服务器为Tomcat。

  为了更清楚的展示,咱们现在mysql建一个测试表test

 

[plain]  view plain  copy
  1. create table test(  
  2. name varchar(20) primary key  
  3. );  

插入几条记录,我们这里插入汉字,遇到乱码,我们可以去解决。

[plain]  view plain  copy
  1. insert into test values('张三');  
  2. insert into test values('李四');  
  3. insert into test values('王五');  


 

插入成功

 

闲话少说,直接上代码:

 

 

PC服务端

  我用MyEclipse建立了一个JavaWeb项目,这个项目中主要由一个数据查询类DBManager.java和一个servlet(loadMessage.java)组成

 

DBManager.java

[plain]  view plain  copy
  1. package com.njue.DBManager;  
  2.   
  3. import java.awt.List;  
  4. import java.sql.*;  
  5. import java.util.ArrayList;  
  6.   
  7. import org.omg.CORBA.Object;  
  8.   
  9. public class DBManager {  
  10.     ;  
  11.     String userName="root";  
  12.     String password="123456";  
  13.     Connection conn=null;  
  14.     Statement stmt=null;  
  15.     String url="jdbc:mysql://localhost:3306/mysql";  
  16.     ArrayList<String> list=new ArrayList<String>();  
  17.     String sql;  
  18. public DBManager(){  
  19.     sql="select * from test;";  
  20.     try {  
  21.         Class.forName("com.mysql.jdbc.Driver");  
  22.         conn=DriverManager.getConnection(url,userName,password);  
  23.         stmt=conn.createStatement();  
  24.         ResultSet rst=stmt.executeQuery(sql);  
  25.         while(rst.next()){  
  26.             //String name=new   String(rst.getString("name").getBytes("latin1"), "UTF-8");   
  27.             String name=new   String(rst.getString("name").getBytes("latin1"), "GB2312");// 这句可要可不要,以你不出现乱码为准  
  28.             //也可不用转化,直接写成String name=rst.getString("name");  
  29.             list.add(name);  
  30.               
  31.         }  
  32.         rst.close();  
  33.     } catch (Exception e) {  
  34.         // TODO Auto-generated catch block  
  35.         e.printStackTrace();  
  36.     }  
  37. }  
  38. public ArrayList<String> getList(){  
  39.     return list;  
  40.     }  
  41. }  


 

loadMessage.java
[plain]  view plain  copy
  1. package com.amaker.servlet;  
  2.   
  3. import java.awt.List;  
  4. import java.io.IOException;  
  5. import java.io.PrintWriter;  
  6. import java.util.ArrayList;  
  7.   
  8. import javax.servlet.ServletException;  
  9. import javax.servlet.http.HttpServlet;  
  10. import javax.servlet.http.HttpServletRequest;  
  11. import javax.servlet.http.HttpServletResponse;  
  12.   
  13. import com.njue.DBManager.DBManager;  
  14.   
  15. public class loadMessage extends HttpServlet {  
  16.     public loadMessage() {  
  17.         super();  
  18.     }  
  19.     public void destroy() {  
  20.         super.destroy(); // Just puts "destroy" string in log  
  21.         // Put your code here  
  22.     }  
  23.        
  24.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
  25.             throws ServletException, IOException {  
  26.     //  request.setCharacterEncoding("UTF-8");  
  27.         response.setContentType("text/html; charset=UTF-8" );  
  28.         PrintWriter out = response.getWriter();  
  29.          String message="";  
  30.          DBManager db=new DBManager();  
  31.            ArrayList<String> list=db.getList();  
  32.            for(int i=0;i<list.size();i++){  
  33.                message=message+list.get(i)+"\r\n";  
  34.            }  
  35.         out.print(message);  
  36.         out.flush();  
  37.         out.close();  
  38.     }  
  39.     public void doPost(HttpServletRequest request, HttpServletResponse response)  
  40.             throws ServletException, IOException {  
  41.         doGet(request,response);  
  42.   
  43.     }  
  44.     public void init() throws ServletException {  
  45.         // Put your code here  
  46.     }  
  47.   
  48. }  

 

 

Android手机客户端代码:

AndroidClientActivity.java

[plain]  view plain  copy
  1. package com.njue.androidClient;  
  2. import android.app.Activity;  
  3. import android.os.Bundle;  
  4. import android.widget.TextView;  
  5.   
  6. public class AndroidClientActivity extends Activity {  
  7.     /** Called when the activity is first created. */  
  8.     @Override  
  9.     public void onCreate(Bundle savedInstanceState) {  
  10.         super.onCreate(savedInstanceState);  
  11.         setContentView(R.layout.main);  
  12.         TextView tv=(TextView)findViewById(R.id.tv);  
  13.         // 查询返回结果  
  14.         String result = HttpUtil.queryStringForPost("http://10.0.2.2:8080/androidWeb/servlet/loadMessage");  
  15.         //String result = HttpUtil.queryStringForPost("http://122.88.34.123:8080/androidWeb/servlet/loadMessage");  
  16.         tv.setText(result);  
  17.     }  
  18. }  


 

HttpUtil.java

[plain]  view plain  copy
  1. package com.njue.androidClient;  
  2.   
  3. import java.io.IOException;  
  4.   
  5. import org.apache.http.HttpResponse;  
  6. import org.apache.http.client.ClientProtocolException;  
  7. import org.apache.http.client.methods.HttpGet;  
  8. import org.apache.http.client.methods.HttpPost;  
  9. import org.apache.http.impl.client.DefaultHttpClient;  
  10. import org.apache.http.util.EntityUtils;  
  11.   
  12. public class HttpUtil {  
  13.     // 基础URL  
  14.     // 获得Get请求对象request  
  15.     public static HttpGet getHttpGet(String url){  
  16.         HttpGet request = new HttpGet(url);  
  17.          return request;  
  18.     }  
  19.     // 获得Post请求对象request  
  20.     public static HttpPost getHttpPost(String url){  
  21.          HttpPost request = new HttpPost(url);  
  22.          return request;  
  23.     }  
  24.     // 根据请求获得响应对象response  
  25.     public static HttpResponse getHttpResponse(HttpGet request) throws ClientProtocolException, IOException{  
  26.         HttpResponse response = new DefaultHttpClient().execute(request);  
  27.         return response;  
  28.     }  
  29.     // 根据请求获得响应对象response  
  30.     public static HttpResponse getHttpResponse(HttpPost request) throws ClientProtocolException, IOException{  
  31.         HttpResponse response = new DefaultHttpClient().execute(request);  
  32.         return response;  
  33.     }  
  34.       
  35.     // 发送Post请求,获得响应查询结果  
  36.     public static String queryStringForPost(String url){  
  37.         // 根据url获得HttpPost对象  
  38.         HttpPost request = HttpUtil.getHttpPost(url);  
  39.         String result = null;  
  40.         try {  
  41.             // 获得响应对象  
  42.             HttpResponse response = HttpUtil.getHttpResponse(request);  
  43.             // 判断是否请求成功  
  44.             if(response.getStatusLine().getStatusCode()==200){  
  45.                 // 获得响应  
  46.                 result = EntityUtils.toString(response.getEntity());  
  47.                  //result=new  String(result.getBytes("8859_1"),"GB2312");  这句可要可不要,以你不出现乱码为准  
  48.   
  49.   
  50.                 return result;  
  51.             }  
  52.         } catch (ClientProtocolException e) {  
  53.             e.printStackTrace();  
  54.             result = "网络异常!";  
  55.             return result;  
  56.         } catch (IOException e) {  
  57.             e.printStackTrace();  
  58.             result = "网络异常!";  
  59.             return result;  
  60.         }  
  61.         return null;  
  62.     }  
  63. }  


 

当然还得在AndroidManifest.xml中加入网络访问权限:

[plain]  view plain  copy
  1. <uses-permission android:name="android.permission.INTERNET"></uses-permission>  


 

需要注意的写服务器的主机号时,千万不能写localhost或者127.0.0.1,因为Android模拟器虽然和服务端程序在同一台电脑上,但两个毕竟是独立的系统,我们可以用10.0.2.2去访问本机。

 

运行结果:

Socket通信:实现PC端和Android端之间的相互通信(通过网络) 实现PC端和android端之间的通信(从android端发送一条信息到PC端,PC端可以接受,并可以把这条信息返回到android端并且显示出来。) 注意点: 1、  在写android代码的时间一定要有处理4.0以后的线程问题,可以使用StrictMode进行解决。 2、  由于程序里面需要Socket进行网络通信,所有程序里面只需要一个Socket,切不可使用多个Socket,既Soc 阅读详情

相关推荐

Android客户端的SSLSocket通信实例源码(PC做服务器、BKS密库)

安卓客户端与PC服务器的SSL socket通信实例。 坑特别多,需要注意。第一次接触,处处遇坑...折腾了几天终于搞定了...接下来准备做双向验证。 需要注意的是,安卓端的密库必须是BKS,PC端的密库必须是JKS

身披白袍的博客 3248

实现Android手机(服务端)与PC(客户端)实现通信

本文在此基础上做了一些修改:http://blog.youkuaiyun.com/wufenglong/article/details/5778862 我主要是要通过在PC端发送命令控制手机作出相应的反应,比如界面的切换,屏幕的滑动。手机和PC通过Socket进行通信,手机作为服务端监听PC端的连接请求,连接成功后接受命令。所以在这里需要两个部分来实现,一个手机端和一个服务端。 1.手机端:在手机需要启...

iteye_517的博客 1391

PC与Android客户端基于Socket的网络通信实战详解

简介:本文详细介绍了PC作为服务端、Android设备作为客户端之间通过Socket实现TCP/IP网络通信的技术方案。涵盖Socket通信的基本原理、Android端网络权限配置、PC端ServerSocket监听机制、双向数据流读写方法,以及多线程并发处理客户端连接的核心技术。文章结合“Service”与“Client”代码模块,解析连接建立、数据传输、异常处理、资源释放等关键流程,强调UI线程安全与超时机制设计,帮助开发者掌握跨平台网络编程的实践要点。

weixin_34945060的博客 771

将个人电脑设为服务器,实现连接此电脑热点的用户均可访问服务器中的项目

说明:由于没有服务器,于是在自己的虚拟机中CentOS 7中部署了java项目,由于虚拟机采用的是Nat联网方式,菜单->编辑->虚拟网络编辑器->更改设置。选择VMnet8网络,点击NAT设置添加端口转发规则。手机通过wifi连接笔记本。,用手机看是否能否访问。

stange1的博客 1392

安卓与PC间Socket通信详细教程及源码解析

Socket即套接字,是网络编程的基础接口,它存在于计算机网络中的两个程序间,用于处理数据包的发送与接收。Socket提供了多种网络通信协议的支持,如TCP和UDP,它们分别用于保证数据传输的可靠性和速度。安卓设备通过网络与外界进行通信是实现丰富功能应用的基础。Socket通信作为一种网络通信技术,能够让安卓应用在不同的网络协议(如TCP/IP、UDP等)下交换数据。无论是在数据同步、远程服务访问,还是在物联网等需要远程设备间互动的场景中,Socket通信都扮演着重要的角色。

weixin_33239721的博客 1083

百变控制服务端与客户端完整套装

跨平台远程控制应用已经成为IT管理、技术支持和远程协作的重要组成部分。随着云计算和移动设备的普及,这类应用的需求正快速增长。它们允许用户从一个中心位置控制多台设备,无论这些设备是台式机、笔记本电脑,还是平板和智能手机。本章将探讨这类应用的基本功能、架构设计和实施的关键点。安卓客户端的界面设计和用户体验是应用能否被广泛接受的关键因素。优秀的界面设计能确保用户在使用应用时直观、便捷,减少学习成本。用户体验设计则着重于满足用户需求,创造愉悦感。

weixin_30299319的博客 470

安卓作为udp服务器,PC作为客户端,仅监听

安卓客户端作为udp服务器,监听其他客户端的数据,测试已成功 本次实验所用数据: 安卓作为服务器: 端口:8888IP:192.168.1.104 电脑作为客户端: 端口:5050IP:192.168.1.107 客户端代码: import java.net.*; import java.io...

weixin_30498921的博客 323

基于Java后台与Socket的Android群聊系统实现(含客户端+服务端)

我们从一个简单的Socket群聊原型出发,经历了UI优化、线程管理、异常处理、性能调优等多个阶段,最终构建出一个接近生产级别的即时通信系统。这个过程告诉我们:真正的技术深度,从来不在于用了多少花哨的框架,而在于你能否把最基础的东西做到极致。当你能从容应对连接风暴、精准识别断线用户、优雅处理并发冲突时,就已经超越了大多数“只会调API”的开发者。而这套系统的每一个改进点——无论是的微小优化,还是的选择考量——都是通往资深工程师之路的垫脚石 🧱。

weixin_35916518的博客 825

Android作为客户端,PC作为服务端:实现网络通信!

from:http://blog.youkuaiyun.com/pzhtpf/article/details/7665539 项目实现网络通信,android手机客户端去请求PC服务端,将PC上mysql中的数据显示在手机上。    PC服务端用JavaWeb写了个servlet,android手机客户端请求这个servlet,由servlet执行查询数据,并返回给手机客户端,服务器为

dylancao的专栏 1195

Android客户端与PC服务器利用WIFI实现Socket通讯

实现了Android客户端作为客户端,PC作为服务器简单通讯!

深入Linux内核:PTP硬件时间戳(HW Timestamp)是如何炼成的?

本文深入探讨了Linux内核中PTP硬件时间戳(HW Timestamp)的实现原理与实战应用。通过分析IEEE 1588协议在网络时间同步中的关键作用,详细解析了硬件时间戳在Linux内核中的架构设计、驱动开发及性能优化技巧,帮助开发者实现纳秒级精度的时间同步。

weixin_30727835的博客 651

Unity用Scoket进行服务端与客户端的连接(中控功能)

最近项目中用到了中控的连接,说下功能,以Unity的主场景为服务端,另外一个场景为客户端,服务端与客户端的连接用Socket进行连接。实现客户端发送效果给服务端, 当然服务端也可以发送消息给客户端。 Server(服务端): 得到本机的IP: public string GetIP(ADDRESSFAM Addfam) { if (Addfam == ADDRESSFAM.IPv6 && !Socket.OSSupportsIPv6) {

qq_38139885的博客 1192

正版63棋牌源代码游戏+728游戏全套带前端源代码解析

这俩天抽时间仔细看了一下这套项目包含完整的前端、后端及后台管理系统。从上传的截图可以看出,前端基于资源目录,后端采用和,后台管理界面提供数据查询与管理功能。本篇文章将从前端结构、后端接口、数据库设计、常见 BUG 及优化方法等方面逐步拆解,并给出相应的代码示例和实践经验。

aa2031171的博客 3576

android客户端与pc服务端开发

<br />android客户端与pc服务端开发这方面的例子非常少,尤其是服务端开发,,<br />希望看到此贴的大侠能够发表一些这方面的例子,,

chentianzhu的专栏 452

Markdown编辑器介绍

这篇文章介绍了Markdown编辑器的功能和使用方法。主要内容包括:Markdown的基本语法如标题、列表、链接插入等;新增功能如图片拖拽、数学公式支持、甘特图和UML图表绘制;常用快捷键说明;以及文本导出导入操作。文章详细说明了如何通过Markdown语法实现文本格式化、代码高亮、表格创建等功能,并提供了多种图表绘制的语法示例,帮助用户更好地利用Markdown编辑器进行写作和内容创作。

soso1968的博客 1180

kaggle-NeurIPS - Open Polymer Prediction 2025-0.069

本文摘要: 本研究基于多任务学习框架,开发了聚合物物理化学性质预测模型,能够根据SMILES字符串同步预测玻璃化转变温度(Tg)、分数游离体积(FFV)等5种关键性质。针对数据缺失率高、样本不均衡等挑战,采用"先补充后扩充"策略整合多源数据,并融合RDKit分子描述符、ChemBERTa语义特征和自编码器特征构建多维度表征。模型采用硬参数共享架构,结合动态加权损失函数和早停机制,在验证集上表现出色,其中密度预测R²达0.92。研究为聚合物性能的高通量预测提供了有效解决方案,对材料智能设计具有重要参考价值。

2302_78976920的博客 783

Android实现TCP服务端客户端(附带源码)

Android实现TCP服务端客户端(附带源码)

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 808

Lmbench测试集 --- 延迟测试工具lat_mem_rd

lmbench测试集简介 以及 lat_mem_rd延迟测试工具: 如何测试、测试结果、源码分析

MonologueYY的博客 1万+
上一篇: android 比较靠谱的选择图片以及拍照,保存图片
下一篇: JQuery中$.ajax()方法参数详解
WhtBk
博客等级 码龄11年 12粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值