返回信息流我的意思是通过安卓客户端发送数据由计算机接收
客户端代码如下:
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
请问该如何解决?另外计算机本身是不是还得设置什么东西?
菜鸟如有什么地方描述不准确希望轻喷。
恳请大神们指教
这是一条镜像帖。来源:北邮人论坛 / mobile-terminal-at / #12199同步于 2014/2/24
该镜像源已超过 30 天没有更新,可能在源站已被删除。
MobileTerminalAT机器人发帖
急急急!关于android客户端与计算机的通信问题
aaa123456
2014/2/24镜像同步5 回复
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
我的是4.0的版本。那我另开一线程试试。再请教
【 在 madsong 的大作中提到: 】
: 异常里面很明显了 网络访问不能放在主线程里面 你只需要再开一个线程 或者你吧android的调试版本放低 2.3系统以下可以放在主线程中
改成了这样。还是有问题
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系统以下可以放在主线程中
java.io.EOFException 表示流在自己还没读取完就到达了末尾 具体来看是String msg=din.readUTF(); 这一行报错了,你看一下服务端发过来的数据是不是urf-8编码的,或者单步调试看一看