安卓利用Socket和PC通信无法连接?
澳门银河官网
澳门银河官网
当前位置 : 澳门银河官网 > 澳门银河官网开户

安卓利用Socket和PC通信无法连接?

  1. 安卓利用Socket和PC通信无法连接

  2. 已经设置了 <uses-permission android:name="android.permission.INTERNET"/>

  3. 相同代码PC端和PC端通信没有问题

  4. 会在new Socketip,port这里一直堵塞;

服务器代码

public ServiceThreadSocket s throws IOException {
        socket = s;
        out = new PrintWriternew BufferedWriternew OutputStreamWritersocket
                .getOutputStream, true;
        in=socket.getInputStream;
    }

    public void run {
        try {
            out.println"SERVER DATA";
            System.out.println"closing...";
            byte[] temp = new byte[1024];
            int length=-1;
            whilelength=in.readtemp>0{
                System.out.printlntemp;
            }
            out.close;
            socket.close;
        } catch Exception e {
        }
    }
}

public class MyServer {
    static final int PORT = 8778;

    public static void mainString[] args throws IOException {
        ServerSocket s = new ServerSocketPORT;
        System.out.println"Server 启动";
        Socket socket = s.accept;
        ServiceThread t = new ServiceThreadsocket;
        t.start;
    }
}

客户端代码

Socket socket = null;
                BufferedWriter out = null;
                try {
                    socket = new Socketip, 8778;
                    out = new BufferedWriternew OutputStreamWritersocket
                            .getOutputStream;
                    out.writesendViewA.getText.toString;
                } catch Exception e {
                    e.printStackTrace;
                } finally {
                Socket socket = null;
                BufferedReader in = null;
                try {
                    socket = new Socketip, 8778;
                    in = new BufferedReadernew InputStreamReadersocket
                            .getInputStream;
                    String fromServerStr = in.readLine;
                    Toast.makeTextOUTActivity.this,fromServerStr,Toast.LENGTH_LONG.show;
                } catch Exception e {
                    e.printStackTrace;
                } finally {

看你的报错,你是不是让 Socket 跑在 UI 线程里面了?—— 安卓上的话,Android 4.0 之后,就不允许在 UI 线程中使用 Socket,需要启动新的线程来使用 Socket

这里应该是ip的问题:

一、如果你的设备是模拟器:请核对相应的模拟器访问电脑主机的ip,一般相应模拟器的官网上有(具体的模拟器不同ip也不尽相同)

  1. Genymotion:10.0.3.2

  2. 安卓模拟器:10.0.2.2

二、如果你的设备是真机,最好保证手机和真机在同一局域网(如果是笔记本电脑的话建议用手机连接电脑WiFi后访问),ip地址在cmd中自己查看即可

之前遇到过一次,客户端的socket连接的代码尝试换成下面的。
客户端:

socket = new Socket;
socket.connectnew InetSocketAddress"1.1.9.30",8080, 5000;

如果手机和PC都在同一个局域网了,那还需要注意一点,是不是路由器上面启用了无线隔离,这也可能是一个坑点。

NetworkOnMainThreadException, 是在主线程涉及Socket相关操作了吧?
这里先让代码跑起来, 假设你现在的客户端代码写在 startClient里面, 需要把这个代码放到子线程去执行:


new Threadnew Runnable {
        @Override
        public void run {
            startClient;
        }
    }.start;
    

实际上, 你还要处理这个线程和主线程UI线程交互的问题, 这个就和业务代码相关了.
建议先了解一下主线程UI线程和子线程的区别/联系, 然后看一下线程通讯的实现.

日志里面都明确写着“network on main thread exception”了啊,像楼上说的那样新开的线程进行网络操作吧

广告位

澳门银河官网