android adb forward 为什么映射到 socket 上?
1. adb 不仅仅通过usb线连接
2. adb 还有wifi-adb无线连接调试
adb 配置
把PC端8000端口的数据, 转发到Android端的9000端口上.
adb forward tcp:8888 tcp:9999
这样PC的端口映射到了 8888 ,而android的端口映射到了 9999
代码编写
pc客户端
public class SocketSendTest {
private RecvThread mRecvThread;
private Socket mSocket;
public SocketSendTest() {
mRecvThread = new RecvThread();
}
public void test() {
String msg = "ABC";
try {
mSocket = new Socket("127.0.0.1", 8888);
DataOutputStream dos = new DataOutputStream(mSocket.getOutputStream());
System.out.println("write " + msg);
dos.write(msg.getBytes("UTF-8"));
dos.flush();
dos.close();
mSocket.close();
// mRecvThread.start();
} catch (IOException e) {
e.printStackTrace();
}
}
private class RecvThread extends Thread {
@Override
public void run() {
super.run();
while (true) {
if (mSocket != null) {
try {
byte[] buffer = new byte[256];
DataInputStream recv = new DataInputStream(mSocket.getInputStream());
System.out.println("启动recv");
int len = recv.read(buffer);
System.out.println("收到" + new String(buffer, 0, len));
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
}
android 服务端
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define MAXLINE 4096
int main(int argc, char ** argv)
{
int listenfd, connfd;
struct sockaddr_in servaddr;
/**
* AF_INET ip, AF_UNIX 是linux的本地socket
*/
if (listenfd = socket(AF_INET, SOCK_STREAM, 0) == -1)
{
printf("create socket error: %s(errno:%d)", strerror(errno), errno);
return -1;
}
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sim_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(9999);
if (bind(listenfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) == -1)
{
printf("bind socket error: %s(errno:%d)", strerror(errno), errno);
return -1;
}
// 创建监听
if (listen(listenfd, 100) == -1)
{
printf("listen error: %s(errno:%d)", strerror(errno), errno);
return -1;
}
printf("waiting for client's request :%d\n", listenfd);
char buff[4096];
int len;
while (1)
{
/**
* accept 是阻塞接口
*/
if( (connfd = accept(listenfd, (struct sockaddr*)NULL, NULL)) == -1)
{
{
printf("accept socket error: %s(errno: %d)",strerror(errno),errno);
continue;
}
printf("begin recv ");
len = recv(connfd, buff, MAXLINE, 0);
printf("server recv msg from ..%d..%d.. client: %s...\n", listenfd, connfd, buff);
close(connfd);
}
}
close(listenfd);
return 0;
}