Android 之Socket通信

本文介绍了一个简单的Android设备与PC之间的TCP通信案例。Android设备作为服务器监听12345端口,PC作为客户端通过adb端口转发连接。文章强调了在Android模拟器环境下正确配置IP的重要性,指出应使用10.0.2.2而非127.0.0.1访问PC。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

逛论坛收集的,总结了下

Android_Server:
final int SERVER_PORT = 12345; private void startServer() { try { Log.e("s: connecting...", ""); ServerSocket serverSocket = new ServerSocket(SERVER_PORT); while (true) { Socket client = serverSocket.accept(); Log.e("s: receiving...", "jjjjjj"); try { BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream())); String str = in.readLine(); Log.e("s: received:'" , "%%%%%%" + str); } catch (Exception e) { Log.e("s: error", ""); e.printStackTrace(); } finally { client.close(); Log.e("s:done", ""); } Thread.sleep(3000); } } catch (Exception e) { Log.e("s:error", ""); e.printStackTrace(); } }
PC_Client:
try { Runtime.getRuntime().exec("adb forward tcp:12581 tcp:12345"); } catch (IOException e3) { e3.printStackTrace(); } Socket socket = null; try { InetAddress serverAddr = null; serverAddr = InetAddress.getByName("127.0.0.1"); System.out.println("TCP 1111" + "C: Connecting..."); socket = new Socket(serverAddr, 12581);//此处的12581是PC开放的端口,已重定向到Device的12345端口 String message = "AndroidRes,Where is my Pig (Android)?"; System.out.println("TCP 2222" + "C: Sending: '" + message + "'"); PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true); out.println(message); } catch (UnknownHostException e1) { System.out.println("TCP 3333" + "ERROR:" + e1.toString()); } catch (IOException e2) { System.out.println("TCP 4444" + "ERROR:" + e2.toString()); } finally { try { if (socket != null) { socket.close(); } } catch (IOException e) { System.out.println("TCP 5555" + "ERROR:" + e.toString()); } } }

注解:要是用Android做客户端,PC做服务端,会抛出一下异常:

E/TCP 1111(12986): C: Connecting...
E/TCP 4444(12986): ERROR:java.net.ConnectException: /127.0.0.1:12345 - Connection refused


问题是这样的,android模拟器(simulator)把它自己作为了localhost,也就是说,代码中使用


localhost或者127.0.0.1来访问,都是访问模拟器自己!这是不行的!

如果你想在模拟器上面访问你的电脑,那么就使用android内置的IP 10.0.2.2 吧, 10.0.2.2 是模拟器设置的特定ip,是你的电脑的别名alias

在模拟器上用10.0.2.2访问你的电脑本机

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值