java socket 发送数据_Java Socket 发送数据给ServerSocket失败

需求

通过 adb forward tcp:localport tcp:remoteport 进行端口转发,实现 PC(客户端) 与 Android(服务端) 进行 Socket 通信

PC端

PC端使用的是JavaFX编写的界面,在其Controller中的代码是:

public class ImageController {

public void onButtonClicked(ActionEvent event) {

try {

Runtime.getRuntime().exec("adb forward tcp:10000 tcp:20000");

Socket client = new Socket(InetAddress.getByName("127.0.0.1"), 10000);

// 向服务端发送消息: hello

OutputStream out = client.getOutputStream();

out.write("hello".getBytes());

out.flush();

} catch (IOException e) {

e.printStackTrace();

}

}

}

Android服务端

/**

接收客户端

*/

public class PCService extends Service {

private static final int SERVER_PORT = 20000;

@Override

public void onCreate() {

super.onCreate();

new Thread(() -> doListening()).start();

}

private void doListening() {

try {

ServerSocket server = new ServerSocket(SERVER_PORT);

Log.i(TAG, "服务器监听中....");

Socket client = server.accept();

new Thread(new SocketIO(client)).start();

} catch (IOException e) {

e.printStackTrace();

}

}

}

SocketIO 客户端连接成功后,进行处理的类,继承Runnable

class SocketIO implements Runnable {

private Socket mClient;

public SocketIO(Socket client) {

mClient = client;

}

@Override

public void run() {

if (mClient.isConnected()) {

try {

// 接收客户端发来的消息

InputStream in = mClient.getInputStream();

Scanner scan = new Scanner(in);

scan.useDelimiter("\\A");

String msg = scan.hasNext() ? scan.next() : "暂无";

System.out.println("接收到的数据: " + msg);

switch (msg) {

case "hello":

// TODO: doSomething();

break;

}

} catch (IOException e) {

e.printStackTrace();

}

} else {

Log.i(TAG, "客户端未连接");

}

}

}

问题

PC端,out.flush() 之后不写任何东西是,点击按钮,Android服务端没有任何显示,当关闭PC端应用程序时, Android服务端显示 -> 接收到数据: hello

当 out.flush() 之后添加 client.shutdownOutputStream() 后, Android服务端显示 -> 接收到数据: 暂无 (意思就是没有收到PC端发来的消息)

想要得到的帮助

如何解决上面的通信问题? PC端发送一条消息给Android端, Android根据消息内容作出响应返回给PC端?

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值