Android与PC的Socket(TCP/IP)通信(by USB) 拒绝连接的

时间: 2010-12-30 01:20 来源: CSDN社区 作者: joy_liut 点击:

情形一:
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_Server与PC_Client连接成功~

情形二:
PC_Server:
try
  {
  Runtime.getRuntime().exec("adb forward tcp:12555 tcp:12345");
   
  System.out.println("s: connecting...");
  ServerSocket serverSocket = new ServerSocket(SERVER_PORT);
  while (true)
  {
  Socket client = serverSocket.accept();
  System.out.println("s: receiving...");
  try
  {
  BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
  String str = in.readLine();
  System.out.println("s: received:'" + str + "'");
  }
  catch (Exception e)
  {
  System.out.println("s: error");
  e.printStackTrace();
  }
  finally
  {
  client.close();
  System.out.println("s:done");
  }
  }
  }
  catch (Exception e)
  {
  System.out.println("s:error");
  e.printStackTrace();
  }
Android_Client:
Socket socket = null;
  try
  {
  InetAddress serverAddr = null;
  serverAddr = InetAddress.getByName("127.0.0.1");
  Log.e("TCP 1111", "C: Connecting...");

  socket = new Socket(serverAddr, 12345);
   
  String message = "AndroidRes,Where is my Pig (Android)?";
  Log.e("TCP 2222", "C: Sending: '" + message + "'");
  PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), 

true);
  out.println(message);
  }
  catch (UnknownHostException e1)
  {
  Log.e("TCP 3333", "ERROR:" + e1.toString());
  }
  catch (IOException e2)
  {
  Log.e("TCP 4444", "ERROR:" + e2.toString());
  }
  finally
  {
  try
  {
  if (socket != null)
  {
  socket.close();
  }
  }
  catch (IOException e)
  {
  Log.e("TCP 5555", "ERROR:" + e.toString());
  }
  }
Android_Client与PC_Server连接失败~抛出以下异常:
E/TCP 1111(12986): C: Connecting...
E/TCP 4444(12986): ERROR:java.net.ConnectException: /127.0.0.1:12345 - Connection refused

我的问题是:
1、Android与PC通信时,是否Android端只能做Server?
2、若Android可以做Client端,要怎么实现,以上代码哪儿有问题?
3、有更多相关的知识也请附上共享,谢谢~~

1. 如果想使用socket通信,需要在mainfest.xml中添加permission: android.permission.INTERNET
2. 如果没有root权限,无法绑定低于1024的端口。



关于回复1:permission是加上的,不然情形1就不会通过了;

我的问题是,为什么情形1能成功,情形2不能呢?

谢谢以上的回答~



即把 127.0.0.1 改为 10.0.2.2 就可以了,我试了下,可以出来

关注 ,有点意思

顶一下!!!!!!!!!!!

好贴!
有个很急的问题:

用usb去配置tcp/ip连接,该怎么做呢?

多谢!



该帖就是基于USB连接的~

终于通过了,谢谢解答!

插上USB线后,如果android手机端是客户端的话,怎么知道PC的IP呢?



android和PC通信有个端口重定向 的过程,已经不做Android了,所以这个问题回答不清楚了,请搜索相关资料 ;)

如果用两个Android模拟器来通信的话, 端口号为5556的模拟器用来充当Server, 端口号为5554的模拟器充当Client,则它们之间的地址也是10.0.2.2吗? 我试过,怎么不行啊?接受不到, 我用UDP来传输

使用模拟器是可以互相访问的,但是用usb连接手机的时候就不能访问了!

谢谢楼主,谢谢大家。楼主的这个问题和大家的讨论在android Socket方面给了我很大的帮助


为什么登录了,还看不到回复呢。。

请问,你第一个服务端在模拟器上,客户端在PC上,能连吗? 
Runtime.getRuntime().exec("adb forward tcp:12581 tcp:12345");
这条语句就通不过吧?




很久没做这个了,不过你问的“你第一个服务端在模拟器上,客户端在PC上,能连吗?”确实能连,当时我们的项目就是这种方式实现的

关注中。。。关注中

???我想知道android用于服务器时需要用到Runtime.getRuntime().exec("adb forward tcp:12555 tcp:12345");这句话吗?这句话有什么作用啊,希望楼主帮我解答下,谢谢了

Android肯定也可以做sever的, 要不大家就去骂死google吧

第二种情况在真机上怎么都连接不上的。不知道楼主有没有在真机上试过,还是需要对真机进行些处理。

TAG标签: Android与PC socket 通信 TCP IP

更多相关文章

  1. socket实现TCP通信_TCP连接android与单片机(2016_03_21)
  2. android笔记 AIDL 实现进程间通信
  3. Android AIDL 实现两个APP之间的跨进程通信实例
  4. Android设备和PC设备有线USB连接双向通信预研报告
  5. Android模拟器无法保存数据

随机推荐

  1. %1$s %1$d Android(安卓)string
  2. 零基础Android(安卓)Studio 入门爬坑记
  3. Android(安卓)adb的权限问题(可以不通过ad
  4. android权限列表
  5. android下载系统版本步骤(通过SecureCRT)
  6. Android(安卓)WebView 软键盘遮挡输入框
  7. android 画图------类似跑马灯的效果
  8. android6.0源码分析之AMS服务源码分析
  9. Android(安卓)如何添加一个apk使模拟器和
  10. Android(安卓)自定义View实现带进度的下