欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

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

創(chuàng)建ServerSocket服務器

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

等待Socket客戶端連接

         //等待客戶端的連接請求
         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客戶端信息

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

在召陵等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務理念,為客戶提供成都網(wǎng)站設計、成都網(wǎng)站制作、外貿(mào)網(wǎng)站建設 網(wǎng)站設計制作按需定制設計,公司網(wǎng)站建設,企業(yè)網(wǎng)站建設,品牌網(wǎng)站設計,營銷型網(wǎng)站建設,成都外貿(mào)網(wǎng)站建設,召陵網(wǎng)站建設費用合理。
               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客戶端文件

為了防止接收消息時,服務器inputStream.read()接受文件時產(chǎn)生阻塞,以文件MD5校驗碼進行校驗,從而結(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);
               // 文件名和長度
               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服務器

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

向ServerSocket服務器發(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ā)送消息時,服務器inputStream.read()讀取消息時產(chǎn)生阻塞,客戶端以換行符結(jié)束發(fā)送(om.write("\n".getBytes());)

向ServerSocket服務器發(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);
                     // 文件名和長度
                     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ā)送文件時,服務器inputStream.read()接受文件時產(chǎn)生阻塞,客戶端先向服務器發(fā)送文件MD5校驗碼再發(fā)送文件,服務器對接收文件進行校驗從而結(jié)束inputStream.read()阻塞。

Demo中發(fā)送格式

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

文件:SERVER_FILE + 文件MD5校驗碼 + 文件

獲取文件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;
     }
   }

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

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

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

廣告

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

成都定制網(wǎng)站建設
亚洲中文字幕av天堂久久| 91亚洲精品一区二区三区| 日韩精品在线另类亚洲| 国产怡红院在线视频观看| 精品人妻一区二区三区蜜桃电| 欧美三级亚洲三级日韩三级| 国产特级黄片免费观看| 97视频在线观看免费| 国产精品久久久久久爽| 九九在线视频免费观看精品视频| 热九九这里只有热九九| 人人妻人人澡人人爽久久av| 性生活视性生活大片日本| 日本欧美国产一区二区| av天堂资源地址在线观看| 亚洲综合另类小说专区| 亚洲av毛片在线网站| 午夜视频在线观看日韩| 91黑丝国产在线播放| 久久久精品国产亚洲av日韩| 人妻91一区二区三区| 亚洲一二三区精品与老人| 日韩精品一区伦理视频| 色婷婷狠狠久久综合中文一本| 国产日韩欧美一区二区丝袜| 成熟人妻一区二区三区人妻| 少妇人妻精品一区二区三| 亚洲日本一区二区高清在线| 欧美亚洲精品一区二区三区| 国产女人和拘做受视频| 蜜桃臀内射一区二区三区| 欧美日韩久久久久久精品| 91亚洲精品久久久蜜桃网站| 色橹橹欧美午夜精品福利| 欧美精品国产欧美精品国产| 大香蕉欧美日韩在线视频| 午夜精品一区二区三区亚洲| 欧美 日韩亚洲一区| av亚洲天堂免费观看| 18末年禁止观看免费软件| 日韩a国产v亚洲欧美精品|