Socket进程间通讯

大体思路


服务器开一个无线循环一直监听8688端口,如果有程序连进来就建立连接,然后从socket中获得输入输出流,在一个无限循环中不断地readline()(这个函数是堵塞的,如果连接断开则会返回null那么这时候就结束循环),客户端也是这样无限循环中不断地读,注意printwriter的构造器中要把自动刷新设为TRUE;
用Socket要设置网络权限;


服务器端代码


建立接口监听,每有一个进程连进来就新开一个进程

 ServerSocket serverSocket=null;
            try{
                serverSocket=new ServerSocket(8688);
            } catch(IOException e){
                Log.i(TAG,"establish tcp server failed,port:8689");
                e.printStackTrace();
                return;
            }
            while (!mIsServiceDestoryed){
                try{
                    final Socket client=serverSocket.accept();
                    Log.i(TAG,"Accept");
                    new Thread(){
                        @Override
                        public void run() {
                             try{
                                 Log.i(TAG,"Run");
                                 responseClient(client);
                             } catch(IOException e){
                                 e.printStackTrace();
                             }
                        }
                    }.start();
                }catch(IOException e){
                    e.printStackTrace();
                }
            }

服务器端对话代码

private void responseClient(Socket client) throws IOException{
            BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));
            PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(client.getOutputStream())),true);
            out.println("welcome");
            Log.i(TAG,"response");
            while (!mIsServiceDestoryed){
                Log.i(TAG,"before readline");
                String str=in.readLine();
                Log.i(TAG,Thread.currentThread().getName()+"#receive#"+str);
                if (str==null) break;
                int i=new Random().nextInt(mDefinedMessages.length);
//                Log.i(TAG,"i");
                String msg=mDefinedMessages[i];
//                Log.i(TAG,msg);
                out.println(msg);
//                Log.i(TAG,Thread.currentThread().getName()+"#send#"+msg);
            }
            Log.i(TAG,Thread.currentThread().getName()+"#mode#"+"quit"+"DE?:"+mIsServiceDestoryed);
            in.close();
            out.close();
            client.close();
        }

客户端代码


客户端连接代码

new Thread(){
            @Override
            public void run() {
                Socket socket;
                while(true){
                  try {
                     socket = new Socket("localhost", 8688);
                      Log.i(TAG,"success");
                      break;
                  } catch(IOException e){
                      Log.i(TAG,"fail to connected!retry......");
                      SystemClock.sleep(400);
                  }


                }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值