android 中socket通信

private Button send;
private TextView rec;
private static Socket client;
private boolean result=false;
private int a=0;
private PrintWriter write;
private static BufferedReader read;
public static int ac=0;
private InputStream input;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rec=(TextView)findViewById(R.id.textView1);;
Thread aa=new Thread(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                 try {
                     //服务器的ip的地址 和端口号
                        client=new Socket(InetAddress.getByName("192.168.1.101"),4312);
                        read=new BufferedReader
                        (new InputStreamReader(client .getInputStream()));              
                        result=true;
                        a=1;                  
                        rec.setText("123");        
                     } 
                    catch(IOException e){ 
                        result=false;rec.setText("错误");
                    }   
                 finally{
                     a=1;
                 }
            }
        });
          aa.start();
          while(a==0);

                if(result){
                    String s ="";
                    try{                               
                    s = read.readLine();//执行到这一步就出错         
                     rec.setText("awq");                    

                    }
                    catch(Exception e){rec.setText("出现异常");}


    }
        每当客户端读取数据时就会出现异常,可以发送消息就是读不了怎么回事

你在那个run方法里看看能不能读出数据?另外把错误贴出来,同时你的代码在非UI线程里更新了UI,这肯定是会报错的

Socket(套接字)是一种通信机制,可以实现单机或跨网络进行通信,其创建需要明确的区分C(客户端)/S(服务器端),支持多个客户端连接到同一个服务器。有两种传输模式:
1)、面向连接的传输:基于TCP协议,可靠性高,但效率低;
2)、面向无连接的传输:基于UDP协议,可靠性低,但效率高;
        Android中,直接采用Socket通信应该是我们遇到的最低级的网络运用。尽管已经作......
答案就在这里:Android网络编程之Socket通信
----------------------你好,人类,我是来自CSDN星球的问答机器人小C,以上是依据我对问题的理解给出的答案,如果解决了你的问题,望采纳。

BufferedReader的初始化看看有没有问题
再看看服务器有没有写入数据,写入的数据是不是一个null值

读取的数据是否正确 是否从buffer中取出对应的值

rec.setText("awq");
线程不能更新ui