【发布时间】:2013-11-10 15:47:12
【问题描述】:
我正在使用一个示例来学习 android 中套接字的使用。我对此有点陌生,我正在用一本书来学习。 我无法真正弄清楚问题出在哪里,因为该示例实际上是从书中复制的,除了 IP,它是我的计算机。 android 应用程序不断抛出此错误:
错误:android.os.NetworkOnMainThreadException
我贴出代码:
因为有些词是西班牙语,我会为你翻译,以防万一它更容易理解:
PUERTO-->端口,ENTRADA-->输入,SALIDA-->输出,ENVIANDO-->发送,HOLA MUNDO-->hello world,RECIBIENDO-->接收,DATOS-->数据,CLIENTE-- >客户
安卓客户端
package com.jacho981.clienteecho;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class ClienteECHO extends Activity {
private TextView output;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cliente_echo);
output = (TextView) findViewById(R.id.TextView01);
ejecutaCliente();
}
private void ejecutaCliente() {
// String ip = "158.42.146.127";
String ip = "192.168.1.3";
int puerto = 7;
log(" socket " + ip + " " + puerto);
try {
Socket sk = new Socket(ip, puerto);
BufferedReader entrada = new BufferedReader(new InputStreamReader(
sk.getInputStream()));
PrintWriter salida = new PrintWriter(new OutputStreamWriter(
sk.getOutputStream()), true);
log("enviando...");
salida.println("Hola Mundo");
log("recibiendo..." + entrada.readLine());
sk.close();
} catch (Exception e) {
log("error: " + e.toString());
}
}
private void log(String string) {
output.append(string + "\n");
}
}
JAVA 服务器
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class ServidorECHO {
public static void main(String args[]) {
try {
ServerSocket sk = new ServerSocket(7);
while (true) {
Socket cliente = sk.accept();
BufferedReader entrada = new BufferedReader(
new InputStreamReader(cliente.getInputStream()));
PrintWriter salida = new PrintWriter(new OutputStreamWriter(
cliente.getOutputStream()), true);
String datos = entrada.readLine();
salida.println(datos);
cliente.close();
}
} catch (IOException e) {
System.out.println(e);
}
}
}
【问题讨论】:
-
在你用感叹号提问之前,我希望你退后一步,看看你得到的错误,“主线程上的网络异常”。谷歌搜索此错误将显示多个结果,帮助您修复它。您需要将您的网络代码移出主线程。
-
标题中带有networkonmainthreadexception的任何问题的重复。
标签: java android sockets client