情形一:
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_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、有更多相关的知识也请附上共享,谢谢~~
2. 如果没有root权限,无法绑定低于1024的端口。
关于回复1:permission是加上的,不然情形1就不会通过了;我的问题是,为什么情形1能成功,情形2不能呢?谢谢以上的回答~
有个很急的问题:用usb去配置tcp/ip连接,该怎么做呢?多谢!
android和PC通信有个端口重定向的过程,已经不做Android了,所以这个问题回答不清楚了,请搜索相关资料 ;)
Runtime.getRuntime().exec("adb forward tcp:12581 tcp:12345");
这条语句就通不过吧?
另外,关于这个问题,我想给大家提供一个思路---找到ddmlib.jar并反编译之,找到ADB相关类,然后阅读其如何实现的,这是最直接最深刻的方式了,希望对各位有用!