BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / mobile-terminal-at / #12199同步于 2014/2/24
该镜像源已超过 30 天没有更新,可能在源站已被删除。
MobileTerminalAT机器人发帖

急急急!关于android客户端与计算机的通信问题

aaa123456
2014/2/24镜像同步5 回复
我的意思是通过安卓客户端发送数据由计算机接收 客户端代码如下: package com.example.socket_2013; import android.os.Bundle; import android.app.Activity; import android.view.View; import android.widget.*; import java.io.*; import java.net.*; public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button b=(Button)findViewById(R.id.button); b.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { connectToServer(); //new MyThread().start(); } }); } public void connectToServer() { EditText et=(EditText)findViewById(R.id.edittext); TextView tv=(TextView)findViewById(R.id.textview); TextView show=(TextView)findViewById(R.id.show); try { Socket socket =new Socket("10.105.19.231",8888); // show.setText("1234455"); DataInputStream din=new DataInputStream(socket.getInputStream()); DataOutputStream dout=new DataOutputStream(socket.getOutputStream()); dout.writeUTF(et.getText().toString()); String msg=din.readUTF(); tv.setText(msg); din.close(); dout.close(); socket.close(); } catch(Exception e) { e.printStackTrace(); show.setText(e.toString()); } } 服务器是一个java程序。如下 import java.io.*; import java.net.*; public class tcpsever { public static void main(String[] args) { try { ServerSocket serversocket=new ServerSocket(8888); while(true) { Socket socket=serversocket.accept(); DataInputStream din=new DataInputStream(socket.getInputStream()); DataOutputStream dout=new DataOutputStream(socket.getOutputStream()); System.out.println("客户端信息"+din.readUTF()); System.out.println("已连上"); dout.writeUTF("这是一个简单的小DEMO"); din.close(); dout.close(); socket.close(); } } catch(Exception e) { e.printStackTrace(); } // TODO Auto-generated method stub } } 好长时间都找不到问题所在。把exception里面异常打印出来显示的是android.os.NetworkOnMainThreadException 请问该如何解决?另外计算机本身是不是还得设置什么东西? 菜鸟如有什么地方描述不准确希望轻喷。 恳请大神们指教
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
madsong机器人#1 · 2014/2/24
异常里面很明显了 网络访问不能放在主线程里面 你只需要再开一个线程 或者你吧android的调试版本放低 2.3系统以下可以放在主线程中
icyfox机器人#2 · 2014/2/24
你去google 搜索那个exception就解决问题了
aaa123456机器人#3 · 2014/2/24
我的是4.0的版本。那我另开一线程试试。再请教 【 在 madsong 的大作中提到: 】 : 异常里面很明显了 网络访问不能放在主线程里面 你只需要再开一个线程 或者你吧android的调试版本放低 2.3系统以下可以放在主线程中
aaa123456机器人#4 · 2014/2/24
改成了这样。还是有问题 package com.example.socket_2013; import android.os.Bundle; import android.app.Activity; import android.view.View; import android.widget.*; import java.io.*; import java.net.*; public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button b=(Button)findViewById(R.id.button); b.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { //connectToServer(); new MyThread().start(); } }); } class MyThread extends Thread{ public void run(){ EditText et=(EditText)findViewById(R.id.edittext); TextView tv=(TextView)findViewById(R.id.textview); TextView show=(TextView)findViewById(R.id.show); try { Socket socket =new Socket("10.105.19.231",8888); show.setText("1234455"); DataInputStream din=new DataInputStream(socket.getInputStream()); DataOutputStream dout=new DataOutputStream(socket.getOutputStream()); dout.writeUTF(et.getText().toString()); String msg=din.readUTF(); tv.setText(msg); din.close(); dout.close(); socket.close(); } catch(Exception e) { e.printStackTrace(); show.setText(e.toString()); } } } } 服务器出现了错误。 java.io.EOFException at java.io.DataInputStream.readUnsignedShort(DataInputStream.java:323) at java.io.DataInputStream.readUTF(DataInputStream.java:572) at java.io.DataInputStream.readUTF(DataInputStream.java:547) at tcpsever.main(tcpsever.java:17) 【 在 madsong 的大作中提到: 】 : 异常里面很明显了 网络访问不能放在主线程里面 你只需要再开一个线程 或者你吧android的调试版本放低 2.3系统以下可以放在主线程中
madsong机器人#5 · 2014/2/24
java.io.EOFException 表示流在自己还没读取完就到达了末尾 具体来看是String msg=din.readUTF(); 这一行报错了,你看一下服务端发过来的数据是不是urf-8编码的,或者单步调试看一看