Android和PC通信

一、这是一篇英文论文,介绍Android远程控制PC的,或许会提供一些思路::-D

http://www.ipcsit.com/vol37/015-ICINT2012-I090.pdf


二、Android和PC之间用Socket(客户端)和ServerSocket(服务端)通信,自己遇到的两个问题:

1、要在.xml配置文件中加上网络访问权限<uses-permission android:name="android.permission.INTERNET"/>

不然就会报访问被拒绝的错误:

W/System.err(10390): java.net.SocketException: socket failed: EACCES (Permission denied)


2、在加上网络访问权限之后,还是没有实现通信,报错信息如下:

android.os.NetworkOnMainThreadException

贴到网上查了一下发现是Android版本的问题,网上说Android4.0之后在主线程中执行Http请求都会报这个错,应该是怕请求时间过长会出现页面无响应。因此,通过开启一个单独的线程执行http请求来解决这个问题。

贴上自己的代码:

Android端

public class ClientActivity extends Activity {
	
	  InetAddress serverAddr;
	  Socket socket = null;
	  String message = "";
		@Override
		protected void onCreate(Bundle savedInstanceState) {
		  // TODO Auto-generated method stub
		  super.onCreate(savedInstanceState);
		  new Thread(runnable).start();
		  
		}
		Runnable runnable = new Runnable(){
	      public void run(){
	    	  try {
	   		   serverAddr = InetAddress.getByName("172.22.173.1");
	   		   Log.d("TCP", "C: Connecting...");
	   		   
	   		   // 与服务器获取连接
	   		   socket = new Socket(serverAddr, 37716);
	   		   message = "Hello eoeandroid !";
	   		  } catch (UnknownHostException e1) {
	   		   // TODO Auto-generated catch block
	   		   e1.printStackTrace();
	   		  }// TCPServer.SERVERIP
	   		  catch (IOException e) {
	   		   // TODO Auto-generated catch block
	   		   e.printStackTrace();
	   		  }
	   		  
	   		  try {
	   		   Log.d("TCP", "C: Sending: '" + message + "'");
	   		   
	   		   // 获取Client端的输出流
	   		   PrintWriter out = new PrintWriter(new BufferedWriter(
	   		     new OutputStreamWriter(socket.getOutputStream())), true);
	   		   out.println(message);
	   		  } catch (Exception e) {
	   		   Log.e("TCP", "S: Error", e);
	   		  } finally {
	   		   try {
	   		    socket.close();
	   		   } catch (IOException e) {
	   		    // TODO Auto-generated catch block
	   		    e.printStackTrace();
	   		   }
	   		  }
	   		}
		};
}
PC端:

public class PCServer implements Runnable{
	
	 	 
	    ServerSocket serverSocket;  
	    Socket socket[];  		
	
		public PCServer(){  
	        new Thread(this).start(); 
		}  
		public static void main(String[] args) {  
		    new PCServer();  
		  
		}  
		
		public void run() {
		  try {
			  System.out.println("connecting.......");
		   serverSocket = new ServerSocket(37716);//在37716端口进行侦听 
		   // 不断获取与客户端的连接(允许与多个客户端进行连接)
		   while (true) {
		    // 获取与一个客户端的连接
		    Socket client = serverSocket.accept();
		    System.out.println("S: Receiving...");
		    try {
		     // 获取与某个连接上的客户端的输入流
		     BufferedReader in = new BufferedReader(
		       new InputStreamReader(client.getInputStream()));
		     String clientConent = in.readLine();
		     
		     // 打印出服务端接收的客户端的信息
		     System.out.println("Client:  " + clientConent );
		    } catch (Exception e) {
		     System.out.println("Server Receive: Error");
		     e.printStackTrace();
		    } finally {
		     client.close();
		     System.out.println("Server Receive: Done.");
		    }
		   }
		  } catch (Exception e) {
		   System.out.println("S: Error");
		   e.printStackTrace();
		  }
		}		
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值