追忆~似水年华 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 用三极管设计一个单管共射放大电路
  • ¥20 fluent无法启动
  • ¥15 孟德尔随机化r语言运行问题
  • ¥15 pyinstaller编译的时候出现No module named 'imp'
  • ¥15 nirs_kit中打码怎么看(打码文件是csv格式)
  • ¥15 怎么把多于硬盘空间放到根目录下
  • ¥15 Matlab问题解答有两个问题
  • ¥15 LCD12864中文显示
  • ¥15 在使用CH341SER.EXE时不小心把所有驱动文件删除了怎么解决
  • ¥15 gsoap生成onvif框架