安卓PC實現通訊與UDP的Java實現
阿新 • • 發佈:2019-02-09
安卓模擬器與PC通訊
安卓與PC之間可以通過ServerSocket 與 Socket進行通訊,採用ServerSocket類進行同步通訊,使用的是TCP/IP協議。
伺服器
public void CreateServer(int port){ try{ ServerSocket server = new ServerSocket(9090); System.out.println("伺服器已經建立成功,等待連線..."); Socket client = server.accept(); System.out.println("有客戶端連線上伺服器,地址是"+client.getInetAddress()); ins = client.getInputStream(); ous = client.getOutputStream(); ois = new ObjectInputStream(ins); oos = new ObjectOutputStream(ous); new Thread(){//開啟一個新執行緒來讀取客戶端發來的資訊 public void run() { try{ String msg; while(true){ msg = ois.readUTF(); System.out.println(msg); } }catch(Exception e){ e.printStackTrace(); } }; }.start(); while(true){//主執行緒使用死迴圈來發送資訊 String msg = scan.nextLine(); try{ oos.writeUTF(msg); oos.flush(); }catch(Exception e){ e.printStackTrace(); } } }catch(Exception e){ e.printStackTrace(); } }
客戶端
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.talk_page); ev = (EditText) findViewById(R.id.msg_input); new Thread(){//開啟一個新執行緒來讀取伺服器傳送過來的資訊 public void run() { try{ System.out.println("test------------進入了了run"); socket = new Socket("192.168.1.113",9090); System.out.println("已經連線上了伺服器..."); ins = socket.getInputStream(); ous = socket.getOutputStream(); oos = new ObjectOutputStream(ous); ois = new ObjectInputStream(ins); String msg; while(true){ msg = ois.readUTF(); System.out.println(msg); } }catch(Exception e){ e.printStackTrace(); } }; }.start(); } public void sendMsg(View v){//按鈕按下後傳送資訊 System.out.println("send按鈕被按下"); String msg = ev.getText().toString(); try{ oos.writeUTF(msg); oos.flush(); }catch(Exception e){ e.printStackTrace(); } }
整個測試圖太大了,分兩個圖傳送
安卓模擬器傳送資訊到PC端伺服器
PC端伺服器傳送資訊給安卓模擬器
UDP的Java實現
UDP是一種不保證通訊質量的通訊協議,不安全,不可靠,但有點是節省資源。
Java程式碼實現是:
客戶端
public void testClient(){ try{ DatagramSocket ds = new DatagramSocket(); System.out.println("客戶端socket已經建立完成..."); byte[] buf = "yi da dui shu ju".getBytes(); String host = "192.168.215.1"; InetAddress ia = InetAddress.getByName(host); DatagramPacket dp = new DatagramPacket(buf,buf.length,ia,9090); System.out.println("客戶端資料包建立完成..."); ds.send(dp); System.out.println("客戶端資料包已經發送給伺服器"); ds.close(); System.out.println("客戶端socket已經關閉..."); }catch(Exception e){ e.printStackTrace(); } }
伺服器
public void CreateServer(){
try{
DatagramSocket ds = new DatagramSocket(9090);
System.out.println("服務端連線已經建立...");
byte[] buf = new byte[16];
DatagramPacket dp = new DatagramPacket(buf,buf.length);
System.out.println("建立資料包完成...");
ds.receive(dp);
System.out.println("已經接收資料包...");
String data = new String(dp.getData());
String host = dp.getAddress().getHostAddress();
int port = dp.getPort();
System.out.println("data:\t"+data+" host:\t"+host+" port:\t"+port);
ds.close();
}catch(Exception e){
e.printStackTrace();
}
}