追忆~似水年华 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 matlab有关常微分方程的问题求解决
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable