追忆~似水年华 2020-06-30 13:54 采纳率: 0%
浏览 224

Android实现TCP通信出现NetworkOnMainThreadException,怎么在子线程实例化Socket?

程序能跑起来就好(っ•̀ω•́)っ✎⁾⁾ ,错误出现在客户端

//服务器端
public class TCPServer {
    public static void main(String args[]) {
        try {
            //为服务器指定一个大于1024的端口号
            ServerSocket serverSocket = new ServerSocket(8888);
            while (true) {
                System.out.println("等待接收客户端的连接::");
                Socket socket = serverSocket.accept();

                System.out.println("建立连接成功!");

                //读取客户端发来的信息
                BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                String str = in.readLine();
                System.out.println("客户端发来的信息:" + str);

                //向客户端发送消息
                PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter
                        (socket.getOutputStream())), true);
                out.println("He11o,I am Server!");
                in.close();
                out.close();
                socket.close();
                serverSocket.close();//
            }
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("服务开启失败");//
        }
    }
}


//客户端
public class MainActivity extends ActionBarActivity {

    private Socket mysocket;
    private EditText clientText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        clientText = (EditText) findViewById(R.id.ClientText);

        try {
            //指定服务器的IP地址和服务器端口,和服务器端建立连接
                        //实例化mysocket出现错误
            mysocket = new Socket("192.168.1.108", 8888);

            //通过PrintWriter向服务器发送信息
            String cmessage = "I am client!";
            PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter
                    (mysocket.getOutputStream())), true);
            out.println(cmessage);
            System.out.println(cmessage);////////

            //通过BufferedReader读取服务器发送过来的信息
            BufferedReader br = new BufferedReader(new InputStreamReader(mysocket.getInputStream()));
            String smessage = br.readLine();

            //将信息显示在输入框中
            clientText.setText(smessage);

            out.close();
            br.close();
            mysocket.close();
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("与服务器连接失败!");
        }

    }

}
  • 写回答

1条回答

  • 简单吗 2020-06-30 14:13
    关注

    new socket 写在子线程里 图片说明

    评论

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料