Jelly-小丑鱼 2018-05-25 07:34 采纳率: 0%
浏览 612
已结题

各位大神好,请教一个android socket的问题

我目前遇到的问题是这样的:我想实现的功能是PC通过USB线连接到android手机,然后PC作为客户端,手机作为服务端,然后进行socket通信,我实现了一种方法,PC端使用
Java来写,已经成功了,现在我需要PC端需要python来写,就是说PC端用python实现
socket的客户端与手机进行USB通信;目前我也实验的差不多了,但是有个问题是:PC端能够连上服务端,但是数据似乎发布出去,安卓手机端一直卡在readUTF()的地方,但是安卓端可以给PC端回数据,PC端也能接收到android端的数据,附上代码,求大神?
PC python 客户端:(我PC端使用了adb forward端口转发)

import socket
import os
from time import sleep
from logging import shutdown
host='127.0.0.1'
port=9000

os.system("adb forward tcp:9000 tcp:9000")
sleep(3)

while 1:
    try:
        cmdstr=raw_input("please input cmd:")
        s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        s.connect((host,port))
        print "connect success"
        #s.sendall("asdafaf")
        #s.settimeout(10)

        req_msg = b'host:transport-any'
        s.sendall('%04x' % len(req_msg))
        s.sendall(req_msg)
        #s.settimeout(10)

        print "send ok"
        data=s.recv(1024)
        print data

    except:
        os.system('adb start-server')
        sleep(2)
        continue


    os.system("pause")

    #s.shutdown(2)
    #s.close()

android 服务端

package com.example.server_android;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.Toast;
import android.util.Log;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class MainActivity extends Activity {

    private static final String TAG = "ServerThread";

    ServerThread serverThread;

    Handler handler = new Handler() {

        @Override
        public void handleMessage(Message msg) {
            Toast.makeText(getApplicationContext(), msg.getData().getString("MSG", "Toast"), Toast.LENGTH_SHORT).show();
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        serverThread = new ServerThread();
        serverThread.start();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        serverThread.setIsLoop(false);
    }

    class ServerThread extends Thread {

        boolean isLoop = true;

        public void setIsLoop(boolean isLoop) {
            this.isLoop = isLoop;
        }

        @Override
        public void run() {
            Log.d(TAG, "running");

            ServerSocket serverSocket = null;
            try {
                serverSocket = new ServerSocket(9000);

                while (isLoop) {
                    Socket socket = serverSocket.accept();

                    Log.d(TAG, "accept");

                    DataInputStream inputStream = new DataInputStream(socket.getInputStream());
                    String msg = inputStream.readUTF();
                    Log.d(TAG, "Message:"+msg);


                    DataOutputStream outputStream = new DataOutputStream(socket.getOutputStream());
                    outputStream.writeUTF("Receive OK");
                    outputStream.flush();

                    //jelly test begin

                    //outputStream.writeUTF("Receive OK\r");

                    //jelly test end

                    Message message = Message.obtain();
                    Bundle bundle = new Bundle();
                    bundle.putString("MSG", msg);
                    message.setData(bundle);
                    handler.sendMessage(message);

                    socket.close();
                }

            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                Log.d(TAG, "destory");

                if (serverSocket != null) {
                    try {
                        serverSocket.close();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }

}

  • 写回答

3条回答

  • 最爱吃葡萄 2018-05-25 08:21
    关注

    python 传递 的数据是UTF编码吗?会不会是编码问题?

    评论

报告相同问题?

悬赏问题

  • ¥15 Java中消息和缓存如何使用
  • ¥50 易语言把MYSQL数据库中的数据添加至组合框
  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路