首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

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

2012-03-05 
Android与PC的Socket(TCP/IP)通信(by USB) 拒绝连接的问题情形一:Android_Server:final int SERVER_PORT

Android与PC的Socket(TCP/IP)通信(by USB) 拒绝连接的问题
情形一:
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、有更多相关的知识也请附上共享,谢谢~~

[解决办法]
我也是搜出来的:现贴下完整点的:

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

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

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

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

参考网址:http://80x86.javaeye.com/blog/539356

热点排行