1. 程式人生 > >安卓PC實現通訊與UDP的Java實現

安卓PC實現通訊與UDP的Java實現

安卓模擬器與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();
		}
	}


UDP通訊執行效果圖