自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

手機(jī)與PC的網(wǎng)絡(luò)協(xié)議

網(wǎng)絡(luò) 通信技術(shù) 網(wǎng)絡(luò)管理
現(xiàn)在我們用一臺(tái)電腦做服務(wù)器,一部手機(jī)做客戶端,來實(shí)現(xiàn)手機(jī)與電腦之間的通信啦。首先,異曲同工,在手機(jī)上建立客戶端與在電腦上是差不多的。

現(xiàn)在我們用一臺(tái)電腦做服務(wù)器,一部手機(jī)做客戶端,來實(shí)現(xiàn)手機(jī)與電腦之間的通信啦。首先,異曲同工,在手機(jī)上建立客戶端與在電腦上是差不多的,首先我們現(xiàn)在電腦上面建立服務(wù)器如下:

  1. package 手機(jī)與PC端通信;   
  2.    
  3. import java.io.IOException;   
  4.    
  5.    
  6.    
  7.    
  8. import java.net.ServerSocket;   
  9. import java.net.Socket;   
  10.    
  11.    
  12.    
  13. public class Server {   
  14.        
  15.     public void setup(int port){   
  16.            
  17.             try {   
  18.                 //創(chuàng)建服務(wù)器   
  19.                 ServerSocket host=new ServerSocket(port);   
  20.                 System.out.println("通信端口"+port+"成功開啟");   
  21.                 while(true){   
  22.                     //等待客戶端訪問   
  23.                     Socket socket=host.accept();   
  24.                     System.out.println("有人訪問了");   
  25.                     //把跟客戶端交流的事情交給線程處理   
  26.                     ServerThread st = new ServerThread(socket);   
  27.                     //開啟線程                     
  28.                     st.start();   
  29.    
  30.                 }   
  31.             } catch (IOException e) {   
  32.                 // TODO Auto-generated catch block   
  33.                 e.printStackTrace();   
  34.             }   
  35.                
  36.            
  37.     }   
  38.     public static void main(String[] args){   
  39.         //傳入端口號(hào)   
  40.         new Server().setup(8888);   
  41.     }   
  42.    
  43. }   

接下來建立線程來處理socket得到的輸入流以及輸出流:

  1. package 手機(jī)與PC端通信;   
  2.    
  3. import java.io.DataInputStream;   
  4.    
  5. import java.io.DataOutputStream;   
  6. import java.io.IOException;   
  7. import java.io.InputStream;   
  8. import java.io.OutputStream;   
  9. import java.net.Socket;   
  10.    
  11. public class ServerThread extends Thread {   
  12.     private Socket socket;   
  13.     private DataOutputStream  dos;   
  14.     public ServerThread(Socket socket){   
  15.         this.socket=socket;   
  16.     }   
  17.        
  18.    
  19.     public void run(){   
  20.         //得到網(wǎng)絡(luò)連接socket得到的輸出輸入流   
  21.         try {   
  22.             //輸入流   
  23.             InputStream input=socket.getInputStream();   
  24.                
  25.             DataInputStream dis=new DataInputStream(input);   
  26.             //得到客戶端的輸出流   
  27.             dos=new DataOutputStream(socket.getOutputStream());   
  28.             //讀取客戶端發(fā)到服務(wù)端的字節(jié)   
  29.             while(true){   
  30.                    int msgType=dis.readInt();   
  31.                    
  32.                     int len=dis.readInt();   
  33.                     byte[] bytes=new byte[len];   
  34.                     dis.readFully(bytes);   
  35.                     String content=new String(bytes,"GB2312");   
  36.                     System.out.println("客戶端說:"+content);   
  37.                        
  38.                        
  39.                         //這里是發(fā)到客戶端的   
  40.                         String replyString = "服務(wù)器收到了("+content+")";   
  41.                         bytes = replyString.getBytes("GB2312");   
  42.                            
  43.                         //寫進(jìn)是文字  1   
  44.                         dos.writeInt(1);   
  45.                         //輸出流寫進(jìn)字節(jié)長(zhǎng)度   
  46.                         dos.writeInt(bytes.length);   
  47.                         //寫進(jìn)字節(jié)   
  48.                         dos.write(bytes);   
  49.                         //刷新   
  50.                         dos.flush();   
  51.                     }   
  52.                    
  53.                
  54.                
  55.                
  56.         } catch (IOException e) {   
  57.             // TODO Auto-generated catch block   
  58.             e.printStackTrace();   
  59.         }   
  60.     }   
  61.    
  62. }   

這些內(nèi)容在上節(jié)中都已經(jīng)講過,這里不做過多闡述

接下來就是重點(diǎn)內(nèi)容啦,就是在Android中建立客戶端,這里我們要使用帶安卓插件的eclipse來編寫

首先處理界面,我大概定義了一個(gè)textview來顯示聊天內(nèi)容,editText來進(jìn)行輸入框的角色,再者就是一個(gè)發(fā)送按鈕,這樣一個(gè)簡(jiǎn)單的聊天界面就已經(jīng)完成了,如下,簡(jiǎn)潔的小界面,讀者們可以自行美化界面哈:

(***記得綁定發(fā)送按鈕到指定函數(shù)哦

***記得綁定發(fā)送按鈕到指定函數(shù)哦。#p#

接下來就是在MainActivity中開始動(dòng)工了,動(dòng)工之前,講一個(gè)非常重要的函數(shù)Handler,我們知道,在UI界面主線程中,我們肯定要獲取到輸入框輸入的文字來發(fā)送到服務(wù)器上,Android里面的線程是不能直接訪問Ui組件的,例如:在另一個(gè)線程調(diào)用textView。setText(“23232”);在編譯的時(shí)候是沒有問題的,但是在運(yùn)行時(shí)就會(huì)報(bào)錯(cuò),所以這時(shí)候就要用到handler的函數(shù),我們?cè)谶@里可以理解為一個(gè)中介,子線程將信息綁定在handler上,handler將信息更新到主函數(shù)UI上,里面會(huì)用到callBack函數(shù),具體代碼里講,萬事俱備,只差將網(wǎng)絡(luò)權(quán)限添加到你的手機(jī)上了,在AndroidMainfest.xml文件中,在

android:minSdkVersion="8"

android:targetSdkVersion="18" />后面添加網(wǎng)絡(luò)允許代碼,就是下面這一句

接下來,就是UI界面MainActivity.java代碼如下:

  1. import android.os.Bundle;   
  2. import android.os.Handler;   
  3. import android.os.Message;   
  4. import android.app.Activity;   
  5. import android.util.Log;   
  6. import android.view.Menu;   
  7. import android.view.View;   
  8. import android.view.View.OnClickListener;   
  9. import android.widget.Button;   
  10. import android.widget.EditText;   
  11. import android.widget.TextView;   
  12. import android.widget.Toast;   
  13.    
  14. public class MainActivity extends Activity {   
  15.     //聊天區(qū)域   
  16.     private TextView textMsgLog;   
  17.     //客戶端處理線程   
  18.     private ClientThread clientThread;   
  19.     protected void onCreate(Bundle savedInstanceState) {   
  20.         super.onCreate(savedInstanceState);   
  21.         setContentView(R.layout.activity_main);   
  22.         Button btnSend=(Button)findViewById(R.id.btnSend);   
  23.         //聊天顯示界面   
  24.         textMsgLog=(TextView)findViewById(R.id.textMsgLog);   
  25.         Log.i("test""oooooooooooooo11111");   
  26.         //創(chuàng)建Handler對(duì)象,介于主線程和子線程一個(gè)代理,子線程ClientThread將要傳遞的數(shù)據(jù)通過   
  27.         //Handler傳遞給主進(jìn)程UI,數(shù)據(jù)在UI上更新   
  28.         Handler.Callback callback=new Handler.Callback(){   
  29.             public boolean handleMessage(Message msg){   
  30.                    
  31.                     //   
  32.                     textMsgLog.append("服務(wù)器:" + msg.obj.toString() +   
  33.                     "\n");   
  34.                    
  35.                 return true;   
  36.             }   
  37.                
  38.         };   
  39.            
  40.            
  41.         Handler handler=new Handler(callback);   
  42.         clientThread =new ClientThread(handler);   
  43.         clientThread.start();   
  44.            
  45.            
  46.     }   
  47.     //將文本輸入框的發(fā)送給服務(wù)器   
  48.     public void send(View v){   
  49.            
  50.         //得到輸入框   
  51.         EditText editInput = (EditText)findViewById(R.id.editInput);   
  52.         //得到輸入框中文字   
  53.         String msg = editInput.getText().toString();   
  54.         //調(diào)用,寫到服務(wù)器上,返回成功   
  55.         boolean result = clientThread.sendText(msg);   
  56.         textMsgLog.append("我:"+msg+"\n");   
  57.         if(result){   
  58.         textMsgLog.append("我:"+msg+"\n");   
  59.         editInput.setText("");   
  60.         } else {   
  61.         Toast.makeText(this"發(fā)送失敗", Toast.LENGTH_LONG).show();   
  62.         }   
  63.            
  64.     }   
  65.            
  66.        
  67.    
  68.     @Override   
  69.     public boolean onCreateOptionsMenu(Menu menu) {   
  70.         // Inflate the menu; this adds items to the action bar if it is present.   
  71.         getMenuInflater().inflate(R.menu.main, menu);   
  72.         return true;   
  73.     }   
  74.    
  75. }   

#p#和客戶端線程,也就是剛才說的子線程代碼:

  1. ackage com.example.eetalk;   
  2.    
  3. import java.io.DataInputStream;   
  4. import java.io.DataOutputStream;   
  5. import java.io.IOException;   
  6. import java.net.Socket;   
  7. import java.net.UnknownHostException;   
  8.    
  9. import android.os.Handler;   
  10. import android.os.Message;   
  11.    
  12. public class ClientThread extends Thread {   
  13.     private Handler handler;   
  14.     private DataOutputStream dos;   
  15.     private DataInputStream dis;   
  16.     private Socket socket;   
  17.    
  18.     public ClientThread(Handler handler) {   
  19.         this.handler = handler;   
  20.     }   
  21.    
  22.     public void run() {   
  23.         try {   
  24.             connect();   
  25.             dos.writeInt(1);   
  26.             dos.writeInt(5);   
  27.             dos.write("hello".getBytes());   
  28.             while (true) {   
  29.                 //讀取服務(wù)器發(fā)過來的數(shù)據(jù)   
  30.                 int msgType = dis.readInt();   
  31.                 //   
  32.                 System.out.println("121");   
  33.                     //   
  34.                     int len = dis.readInt();   
  35.                     //   
  36.                     byte[] bytes = new byte[len];   
  37.                     dis.readFully(bytes);   
  38.                     //   
  39.                     String content = new String(bytes, "GB2312");   
  40.                     Message msg = new Message();   
  41.                     msg.what = 1;   
  42.                     //   
  43.                     msg.obj = content;   
  44.                     //   
  45.                     handler.sendMessage(msg);   
  46.                    
  47.             }   
  48.         } catch (IOException e) {   
  49.             e.printStackTrace();   
  50.         } finally {   
  51.             //close();   
  52.         }   
  53.    
  54.     }   
  55.    
  56.     private void connect() throws UnknownHostException, IOException {   
  57.         //   
  58.         socket = new Socket("172.27.35.3"8888);   
  59.         //   
  60.         dis = new DataInputStream(socket.getInputStream());   
  61.            
  62.         dos = new DataOutputStream(socket.getOutputStream());   
  63.    
  64.     }   
  65.    
  66.     private void close() {   
  67.         if (dis != null) {   
  68.             try {   
  69.                 dis.close();   
  70.             } catch (IOException e) {   
  71.             }   
  72.         }   
  73.         if (dos != null) {   
  74.             try {   
  75.                 dos.close();   
  76.             } catch (IOException e) {   
  77.             }   
  78.         }   
  79.         if (socket != null) {   
  80.             try {   
  81.                 socket.close();   
  82.             } catch (IOException e) {   
  83.             }   
  84.         }   
  85.     }   
  86.     //發(fā)送到服務(wù)器的   
  87.     public boolean sendText(String content){   
  88.         try {   
  89.         //   
  90.         byte[] bytes = content.getBytes("GB2312");   
  91.         //   
  92.         dos.writeInt(1);   
  93.         //   
  94.         dos.writeInt(bytes.length);   
  95.         //   
  96.         dos.write(bytes);   
  97.         dos.flush();   
  98.         return true;   
  99.         } catch (IOException e) {   
  100.         e.printStackTrace();   
  101.         }   
  102.         return false;   
  103.         }   
  104. }   

記住你的手機(jī)和你的電腦一定要在同一個(gè)局域網(wǎng),這里可以看出手機(jī)的客戶端做法與電腦是差不多的,上面手機(jī)客戶端連接的ip地址是你的電腦連入的ipv4地址,可以在cmd命令里恰如ipconfig來搜尋。

做到這里,將你的app下載到手機(jī),打開服務(wù)器,打開手機(jī)的應(yīng)用程序,就可以聊天了,記住打開網(wǎng)絡(luò)

美美聊天了:

這是服務(wù)器

 

 

這是手機(jī)客戶端

 

 

 

 

做到這里,就可以和手機(jī)互發(fā)圖片和文字啦,這是小編下期的實(shí)現(xiàn)目標(biāo) 。

責(zé)任編輯:林琳 來源: ITeye-博客
相關(guān)推薦

2020-04-23 09:11:09

網(wǎng)絡(luò)協(xié)議網(wǎng)絡(luò)設(shè)備網(wǎng)絡(luò)

2011-11-10 09:43:14

ZigBee協(xié)議棧網(wǎng)絡(luò)層

2019-03-29 10:31:53

2019-10-09 08:41:49

XA2PC3PC

2016-11-16 15:36:09

2016-11-16 08:47:01

2010-01-21 11:33:29

GoogleChrome OS

2013-08-01 10:01:02

網(wǎng)絡(luò)協(xié)議TCP協(xié)議UDP協(xié)議

2019-11-08 10:00:09

Windows手機(jī)應(yīng)用程序

2014-06-13 13:47:31

UDP

2020-04-20 21:22:50

網(wǎng)絡(luò)設(shè)備網(wǎng)絡(luò)協(xié)議計(jì)算機(jī)網(wǎng)絡(luò)

2011-08-24 10:31:01

網(wǎng)絡(luò)協(xié)議SLIPPPP

2010-09-09 15:25:35

網(wǎng)絡(luò)協(xié)議

2010-07-05 10:38:49

網(wǎng)絡(luò)層次協(xié)議

2012-10-19 09:38:56

Ubuntu 12.1

2010-06-17 17:51:12

資源預(yù)留協(xié)議

2010-06-17 18:00:40

網(wǎng)絡(luò)通訊協(xié)議

2018-12-24 06:56:12

物聯(lián)網(wǎng)網(wǎng)絡(luò)協(xié)議MiWi

2015-04-01 10:22:06

WebSocket網(wǎng)絡(luò)協(xié)議WebSocket協(xié)議

2018-02-09 15:23:35

PC游戲手游Moonlight
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)