内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

Android的Socket通信使用方法-創(chuàng)新互聯(lián)

創(chuàng)建ServerSocket服務(wù)器

serverSocket = new ServerSocket(port);//首先創(chuàng)建一個(gè)服務(wù)端口
//等待客戶端的連接請(qǐng)求
socket = serverSocket.accept();

等待Socket客戶端連接

         //等待客戶端的連接請(qǐng)求
         socket = serverSocket.accept();
         final String socketAddress = socket.getRemoteSocketAddress().toString();
         runOnUiThread(new Runnable() {
           @Override
           public void run() {
             Toast.makeText(ServerActivity.this, "成功建立與客戶端的連接 : " + socketAddress, Toast.LENGTH_SHORT).show();
             Log.i("Lin", "成功建立與客戶端的連接 : " + socketAddress);
           }
         });

接收Socket客戶端信息

為了防止接收消息時(shí),服務(wù)器inputStream.read()讀取消息時(shí)產(chǎn)生阻塞,以換行符("\n")結(jié)束inputStream.read()

在召陵等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作按需定制設(shè)計(jì),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站設(shè)計(jì),營(yíng)銷型網(wǎng)站建設(shè),成都外貿(mào)網(wǎng)站建設(shè),召陵網(wǎng)站建設(shè)費(fèi)用合理。
               byte[] bytes = new byte[1];
               StringBuilder info = new StringBuilder();
               while (inputStream.read(bytes) != -1) {
                 String str = new String(bytes);
                 if (str.equals("\n")) {
                   break;
                 }
                 info.append(new String(bytes));
               }
               final String finalInfo = info.toString();
               Log.i("Lin", "text = " + finalInfo);
               runOnUiThread(new Runnable() {
                 @Override
                 public void run() {
                   mEtReceive.setText(mEtReceive.getText().toString() + socketAddress + " : " + finalInfo + "\n");
                 }
               });

接收Socket客戶端文件

為了防止接收消息時(shí),服務(wù)器inputStream.read()接受文件時(shí)產(chǎn)生阻塞,以文件MD5校驗(yàn)碼進(jìn)行校驗(yàn),從而結(jié)束inputStream.read()

               byte[] remote = new byte[32];
               String md5 = "";
               if (inputStream.read(remote) != -1) {
                 md5 = nullOfString(new String(remote));
               }

               final String root = Environment.getExternalStorageDirectory().getPath();
               Log.i("Lin", root);
               byte[] inputByte = new byte[1024 * 1024];
               int len = 0;
               long fileSize = 0;

               DataInputStream dis = new DataInputStream(inputStream);
               // 文件名和長(zhǎng)度
               String fileName = dis.readUTF();
               final long fileLength = dis.readLong();
               Log.i("Lin", "fileName = " + fileName);
               Log.i("Lin", "fileLength = " + fileLength);
               mPath = root + "/ECG/" + fileName;
               File file = new File(root + "/ECG/");
               if (!file.exists()) file.mkdir();
               file = new File(mPath);
               FileOutputStream fileOutputStream = new FileOutputStream(file);
               String fileMD5 = nullOfString(getFileMD5(new File(mPath)));
               while (!md5.equals(fileMD5) && (len = dis.read(inputByte, 0, inputByte.length)) > 0) {
                 fileSize += len;
                 fileOutputStream.write(inputByte, 0, len);
                 fileOutputStream.flush();
                 fileMD5 = nullOfString(getFileMD5(new File(mPath)));
                 Log.i("Lin", "md5 = " + md5 + " file = " + fileMD5);
                 Log.i("Lin", "fileLength = " + fileLength + " fileSize = " + fileSize + " " + (fileSize * 100 / fileLength) + "%")
                 ;
                 final long finalFileSize = fileSize;
                 runOnUiThread(new Runnable() {
                   @Override
                   public void run() {
                     mProgressDialog.setMessage((finalFileSize * 100 / fileLength) + "%");
                     mProgressDialog.show();
                   }
                 });
                 if (md5.equals(fileMD5)) {
                   fileOutputStream.close();
                   runOnUiThread(new Runnable() {
                     @Override
                     public void run() {
                       mProgressDialog.hide();
                     }
                   });
                 }
               }
               Log.i("Lin", "md52 = " + md5 + " file2 = " + getFileMD5(file));
               fileMD5 = nullOfString(getFileMD5(new File(mPath)));
               Log.i("Lin", "file = " + fileMD5);
               final String finalFileMD = fileMD5;
               final String finalMd = md5;
               runOnUiThread(new Runnable() {
                 @Override
                 public void run() {
                   mEtReceive.setText(mEtReceive.getText().toString() + "文件路徑:" + mPath + "\n");
                   mEtReceive.setText(mEtReceive.getText().toString() + "file = " + finalFileMD + "\n");
                   mEtReceive.setText(mEtReceive.getText().toString() + "text = " + finalMd + "\n");
                 }
               });

客戶端

創(chuàng)建Socket客戶端

連接ServerSocket服務(wù)器

socket = new Socket();
socket.connect(new InetSocketAddress(ip, port));
//ip= 服務(wù)器ip
//port= 服務(wù)器端口

向ServerSocket服務(wù)器發(fā)送消息

             try {
               if (socket == null) return;
               OutputStream om = socket.getOutputStream();
               om.write(Constant.SERVER_TEXT.getBytes());
               om.write(returnServer.getBytes());
               om.write("\n".getBytes());//[10]
               om.flush();
             } catch (Exception e) {
               e.printStackTrace();
               Log.i("Lin", e.toString());
             }

為了防止發(fā)送消息時(shí),服務(wù)器inputStream.read()讀取消息時(shí)產(chǎn)生阻塞,客戶端以換行符結(jié)束發(fā)送(om.write("\n".getBytes());)

向ServerSocket服務(wù)器發(fā)送文件

                   File file = new File(finalImagePath);
                   if (file.exists()) {
                     final String fileMD5 = nullOfString(getFileMD5(file));
                     OutputStream outputStream = socket.getOutputStream();
                     runOnUiThread(new Runnable() {
                       @Override
                       public void run() {
                         mEtReceive.setText(mEtReceive.getText().toString() + "file = " + fileMD5 + "\n");
                       }
                     });

                     FileInputStream fileInputStream = new FileInputStream(file);
                     outputStream.write(Constant.SERVER_FILE.getBytes());
                     outputStream.flush();
                     outputStream.write(fileMD5.getBytes());
                     outputStream.flush();
                     DataOutputStream dis = new DataOutputStream(outputStream);
                     // 文件名和長(zhǎng)度
                     dis.writeUTF(file.getName());
                     dis.flush();
                     dis.writeLong(file.length());
                     dis.flush();
                     byte[] buffer = new byte[1024 * 1024];
                     int len = 0;
                     while ((len = fileInputStream.read(buffer, 0, buffer.length)) > 0) {
                       dis.write(buffer, 0, len);
                       dis.flush();
                     }
                     fileInputStream.close();
                     Log.i("Lin", "傳輸成功");
                   }

為了防止發(fā)送文件時(shí),服務(wù)器inputStream.read()接受文件時(shí)產(chǎn)生阻塞,客戶端先向服務(wù)器發(fā)送文件MD5校驗(yàn)碼再發(fā)送文件,服務(wù)器對(duì)接收文件進(jìn)行校驗(yàn)從而結(jié)束inputStream.read()阻塞。

Demo中發(fā)送格式

字符:SERVER_TEXT + 字符 + 換行符(\n)

文件:SERVER_FILE + 文件MD5校驗(yàn)碼 + 文件

獲取文件MD5

   private static String getFileMD5(File file) {
     if (!file.isFile()) {
       return null;
     }
     MessageDigest digest;
     FileInputStream in;
     try {
       byte[] buffer = new byte[1024];
       int len;
       digest = MessageDigest.getInstance("MD5");
       in = new FileInputStream(file);
       while ((len = in.read(buffer, 0, 1024)) != -1) {
         digest.update(buffer, 0, len);
       }
       in.close();
       BigInteger bigInt = new BigInteger(1, digest.digest());
       return bigInt.toString(16);
     } catch (Exception e) {
       e.printStackTrace();
       return null;
     }
   }

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

當(dāng)前名稱:Android的Socket通信使用方法-創(chuàng)新互聯(lián)
當(dāng)前URL:http://www.rwnh.cn/article0/jdoio.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)、Google網(wǎng)站維護(hù)、品牌網(wǎng)站設(shè)計(jì)云服務(wù)器、微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)
咸丰县| 湘西| 光山县| 鄂托克前旗| 兴文县| 资讯| 长汀县| 大洼县| 三台县| 白水县| 乌兰察布市| 秦安县| 邯郸市| 渑池县| 涿州市| 屏东县| 康定县| 屏南县| 安新县| 宁明县| 普陀区| 杨浦区| 个旧市| 藁城市| 临漳县| 房产| 鄯善县| 乌兰浩特市| 永胜县| 桐柏县| 万州区| 丹东市| 曲水县| 谢通门县| 重庆市| 洪泽县| 丹江口市| 宝清县| 彩票| 莱芜市| 永吉县|