android socket 通信例子

马上就要中秋了,7+3=8有点伤不起啊,一直感到很颓废,这两个月也没有怎么更新过博客,也不知道该怎么写,不知道写什么,最近一个小项目,需要用到socket通信,和C#客户端。大笑,这种需求用到的不多,手机做Socket服务器,这种需求也用的不多。所以,就写点关于socket通信自己的一点心得吧!

        第一点:别忘了在manifest文件里面加访问网络权限

                      

[java]  view plain copy
  1. <uses-permission android:name="android.permission.INTERNET"></uses-permission>  

         第二点:启动服务器,进行监听

[java]  view plain copy
  1. new Thread(new SocketServerRun()).start();  
  2.     }  
  3.   
  4.     class SocketServerRun implements Runnable {  
  5.   
  6.         @Override  
  7.         public void run() {  
  8.   
  9.             try {  
  10.                 ServerSocket ss = new ServerSocket(Constant.LISTEN_PORT);  
  11.                 while (true) {  
  12.                     Socket s = ss.accept();  
  13.                     br = new BufferedReader(new InputStreamReader(  
  14.                             s.getInputStream() , "utf-8"));  
  15.                       
  16.                     String strContent;  
  17.                     if ((strContent = br.readLine()) != null ) {  
  18.                         Message message = new Message();  
  19.                         message.obj = strContent;  
  20.                         mHandler.sendMessage(message);  
  21.                     }  
  22.                       
  23.                     br.close();  
  24.                     s.close();  
  25.                 }  
  26.             } catch (IOException e) {  
  27.                 e.printStackTrace();  
  28.             }  
  29.         }  
  30.           
  31.     }  

       启动一个线程进行监听,不要在主线程(UI线程)进行网络操作,你知道的,有时候如果网络不好或者其他原因造成5秒的阻塞,那就ANR了。

  

[html]  view plain copy
  1. ServerSocket ss = new ServerSocket(Constant.LISTEN_PORT);  
启动一个ServerSocket监听一个端口号:如666、5558等等。

然后使用ServerSocket的accept()方法,该方法使server端程序一直处于等待状态,直到捕获到一个来自Client端的请求,然后返回用于和改Client通信的Socket对象s。直到server程序关闭,Client和Server端就可以进行读写操作了。在上面的代码中,只进行了写入操作。当然,也可以用以下语句进行写出操作:

[java]  view plain copy
  1. PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream(), "utf-8")),true);        
  2.             out.println(str);   

这是服务器端,客户端呢,相对来说更简单:

[java]  view plain copy
  1. Socket socket = null;  
  2.                 String message = mEditText.getText().toString() + "\r\n";   
  3.                 try   
  4.                 {     
  5.                     //创建Socket  
  6.                     socket = new Socket("192.168.1.16"8091);   
  7.                     //向服务器发送消息  
  8.                     PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);        
  9.                     out.println(message);   
  10.                       
  11.                     //接收来自服务器的消息  
  12.                     BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));   
  13.                     String msg = br.readLine();   
  14.                       

创建Socket,通过IP地址和端口号对服务器端建立连接。然后进行通信。

第三点:关闭资源

              像创建的BufferedReader、PrintWriter、包括socket这些资源,一定要记得关闭。

[java]  view plain copy
  1. //关闭流  
  2.                     out.close();  
  3.                     br.close();  
  4.                     //关闭Socket  
  5.                     socket.close();   

好吧,今天就写到这吧。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值