首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

java Android socket 多线程 小结

2012-09-05 
java Android socket 多线程 总结今天做了一个多线程的例子,多个Android手机和电脑通信。首先要说的时候 我

java Android socket 多线程 总结
今天做了一个多线程的例子,多个Android手机和电脑通信。

首先要说的时候 我的一个理解误区,也是我最大的收获。

先说一下socket,比如

while(true){     Socket sc=ServerSocker.accept();}


我一直以为这个阻塞是自己的while循环产生的,后来差资料发现,accept()方法自己产生阻塞,
也就说 进入while循环以后,代码会停在 Socket sc=ServerSocker.accept();这一行,知道有链接请求,才会进入下一个循环,继续等待连接,在那里阻塞。 这个while 循环是为了多个客户端链接,每一个链接都会得到一个Socket实例,用这个实例与客户端通讯,
这就需要自己开辟进程,进行处理了。语文学的不好,贴出代码来

java程序
package com.bh;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;public class Server{/** * @param args */int i=0;private static ServerSocket mServerSocker;private static Socket sc;//private static BufferedReader in;//private static PrintWriter out;public static void main(String[] args) throws IOException {mServerSocker=new ServerSocket(8888);while(true){sc=mServerSocker.accept();System.out.println("aaaaaaaa");//Server s=new Server();Thread r=new ReciveThreat(sc);r.start();Thread s=new SendThread(sc); s.start();System.out.println("kaishi");//my.run();//new Server().run();}//out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(sc.getOutputStream())),true);}}


send类
package com.bh;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.net.Socket;public class SendThread extends Thread{private Socket sc;int i=0;//private BufferedReader in;private PrintWriter out;public SendThread(Socket s) throws IOException {sc=s;//in=new BufferedReader(new InputStreamReader(sc.getInputStream()));out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(sc.getOutputStream())),true);//System.out.println("ok");}@Overridepublic void run() {// TODO Auto-generated method stubtry {while(true){Thread.sleep(3000);System.out.println("aa");out.println(i++);}} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}


recive类

package com.bh;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.net.Socket;public class ReciveThreat extends Thread{private Socket sc;private BufferedReader in;//private PrintWriter out;public ReciveThreat(Socket s) throws IOException {sc=s;in=new BufferedReader(new InputStreamReader(sc.getInputStream()));//out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(sc.getOutputStream())),true);}@Overridepublic void run() {while(true){try {String str;str = in.readLine();if(str!=null){System.out.println("read:"+str);System.out.println("run......");}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}


Android程序
package com.bh.test;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.net.Socket;import java.net.UnknownHostException;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;public class Main extends Activity implements Runnable{    /** Called when the activity is first created. */EditText et;String recive;Socket s;TextView t;PrintWriter out;BufferedReader in;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        et=(EditText) findViewById(R.id.edittext);        Button b=(Button) findViewById(R.id.send);        t=(TextView) findViewById(R.id.showtext);try {s = new Socket("10.0.2.2",8888);out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(s.getOutputStream())),true);in=new BufferedReader(new InputStreamReader(s.getInputStream()));} catch (UnknownHostException e1) {// TODO Auto-generated catch blocke1.printStackTrace();} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();} new Thread(this).start();        b.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubString aa=et.getText().toString();out.println(aa);//s.close();Log.d("aaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");}});    }    public Handler handler = new Handler(){    public void handleMessage(android.os.Message msg) {    switch (msg.what) {case 1:t.setText(recive);break;default:break;}        };};@Overridepublic void run() {while(true){try {//String str;recive = in.readLine();Log.d("aaaaa",recive);if(recive!=null){//t.setText(recive);handler.sendEmptyMessage(1);}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}


有错误 大家指出了 谢谢哈 1 楼 luyunhan 2012-02-18   不知道楼主调试过没有,我在Android3.0的xoom上运行的时候强制关闭了。问题应该出现在客户端得39行上面。

热点排行