Lan*_*ure 9 sockets multithreading android
Android noob在这里.通过查看功能示例的源代码,我学到了最好的东西,但是我无法找到在自己的线程中使用套接字的简单但完整的示例.
我有一个需要与互联网通信的Android服务.我想打开连接到Internet上的服务器的TCP套接字.该服务需要将数据发送到Internet,并且从网络返回的数据将需要转到该服务.由于服务也在做其他事情,因此套接字连接需要存在于自己的线程中.
知道我在哪里可以找到一个与套接字通信的线程中的套接字示例?
谢谢

Bri*_*fey 15
您只需创建一个在后台进行通信的异步任务,然后根据需要更新UI线程.这是从套接字获取信息并使用接收的字节数更新文本视图的后台线程
public class InternetTask extends AsyncTask<Void, Integer, Void> {
private WeakReference<TextView> mUpdateView;
public LoginTask(TextView view) {
this.mUpdateView = new WeakReference<TextView>(view);
}
@Override
protected Void doInBackground() {
try {
Socket socket = new Socket("127.0.0.1", 80);
InputStream is = socket.getInputStream();
byte[] buffer = new byte[25];
int read = is.read(buffer);
while(read != -1){
publishProgress(read);
read = is.read(buffer);
}
is.close();
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
protected void onProgressUpdate(Integer... values) {
if(mUpdateView.get() != null && values.length > 0){
mUpdateView.get().setText(values[0].toString());
}
}
}
Run Code Online (Sandbox Code Playgroud)
以下是你如何解决这个问题
public class TestTab extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.someLayout);
TextView textView = (TextView)findViewById(R.id.someid);
InternetTask task = new InternetTask(textView);
task.execute();
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个关于这个主题的长篇博客,服务器和客户端部分都在显示,套接字通信通过一个单独的线程.
需要注意的一件事是,如果你传递ints,你可能会遇到字节顺序问题,所以,只做一些测试,我建议你确保服务器以Android所需的格式发送,万一你在多个操作系统上安装服务器.
一个简单的方法,在Android上找到字节顺序,你可以使用它:http://developer.android.com/reference/java/nio/ByteOrder.html
根据这篇文章,可以交换字节顺序进行优化:http: //en.wikipedia.org/wiki/Dalvik_(software)
| 归档时间: |
|
| 查看次数: |
29074 次 |
| 最近记录: |