2018年8月13日 星期一

Sock 创建客户端 & 服务器的连接


      public void connet(){
        // 步骤1:创建客户端 & 服务器的连接
        // 创建Socket对象 & 指定服务端的IP及端口号
        try {
            socket=new Socket(); 
            socket   = new Socket("192.168.10.14", 55555);
            socket.setSoTimeout(1000); //設超時
            socket.isConnected();  
            Log.e("Debug","連接"+ socket.isConnected());
            Toast.makeText(this, "連接"+socket.isConnected(), Toast.LENGTH_SHORT).show();
            if( socket.isConnected()){
                two();
            }
        } catch (IOException e) {
            Log.e("Debug","IOException"+ socket.isConnected());
            Toast.makeText(this, "IOException"+socket.isConnected(), Toast.LENGTH_SHORT).show();
            e.printStackTrace();
        }
        // 判断客户端和服务器是否连接成功
    }


   //   <-- 操作2:发送数据 到 服务器 -->
   
第一種方式
    public void sennd1(){
        //   <-- 操作2:发送数据 到 服务器 -->
        // 步骤1:从Socket 获得输出流对象OutputStream
        // 该对象作用:发送数据
        OutputStream outputStream = null;
        try {
            outputStream = socket.getOutputStream();
        } catch (IOException e) {
            e.printStackTrace();
        }
        // 步骤2:写入需要发送的数据到输出流对象中 
        for(int i = 0 ; i < 5 ; i++){
            try {
                outputStream.write(("Carson_Ho"+i+"\n").getBytes("utf-8"));
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        // 特别注意:数据的结尾加上换行符才可让服务器端的readline()停止阻塞
        // 步骤3:发送数据到服务端
        try {
        outputStream.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            // 步骤3:断开客户端 & 服务器 连接
             outputStream.close();
            // 断开 客户端发送到服务器 的连接,即关闭输出流对象OutputStream
            br.close();
            // 断开 服务器发送到客户端 的连接,即关闭输入流读取器对象BufferedReader
            socket.close();
            // 最终关闭整个Socket连接
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

第二種方式 
 
   public void sennd2(){ 
        //   <-- 操作2:发送数据 到 服务器 -->
        // 步骤1:从Socket 获得输出流对象OutputStream
        // 该对象作用:发送数据 
        // 步骤2:写入需要发送的数据到输出流对象中
        try {
            //向服务器端发送数据
            Map<String, String> map = new HashMap<String, String>();
            map.put("name","aa");
            map.put("img","bb");
            map.put("op","cc"+"");
            JSONObject json = new JSONObject(map);
            String jsonString = "";
            jsonString = json.toString(); 
            //将String转化为byte[]
            //byte[] jsonByte = new byte[jsonString.length()+1];
            byte[] jsonByte = jsonString.getBytes();
            DataOutputStream outputStream = null;
            outputStream = new DataOutputStream(socket.getOutputStream());
            System.out.println("发的数据长度为:"+jsonByte.length);
            outputStream.write(jsonByte);
            outputStream.flush();
            System.out.println("传输数据完毕");
            socket.shutdownOutput();

            Toast.makeText(this, "Carson_ho", Toast.LENGTH_SHORT).show();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

public void service(){
        // <-- 操作1:接收服务器的数据 -->
        // 步骤1:创建输入流对象InputStream
        InputStream is = null;
        try {
            is = socket.getInputStream();
        } catch (IOException e) {
            e.printStackTrace();
        }
        // 步骤2:创建输入流读取器对象 并传入输入流对象
        // 该对象作用:获取服务器返回的数据
        InputStreamReader isr = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);

        // 步骤3:通过输入流读取器对象 接收服务器发送过来的数据
        try {
            br.readLine();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

沒有留言:

張貼留言