標籤:網路編程 package android import public
1.使用UDP協議傳輸資料
UDP協議不可靠,資料包發送出去之後無法確定是否被接收方接收到
在Java裡寫好Server如下
package com.umgsai.server;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.util.Calendar;import java.util.Date;public class Server {static Date date ;public static void main(String[] args) {while (true) {try {// 建立一個DatagramSocket對象,並指定監聽的連接埠號碼DatagramSocket socket = new DatagramSocket(4572);byte data[] = new byte[1024];// 建立一個空的DatagramPacket對象DatagramPacket packet = new DatagramPacket(data, data.length);// 使用receive方法接收用戶端所發送的資料socket.receive(packet);String result = new String(packet.getData(),packet.getOffset(), packet.getLength());date = Calendar.getInstance().getTime();System.out.println(date);System.out.println("result--->" + result);socket.close();} catch (Exception e) {e.printStackTrace();}}}}
用戶端在Android裡面編寫
介面activity_main.xml
<Button android:id="@+id/sendMessage" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="發送訊息" />
Android4.0+作業系統中串連網路的操作不能在主線程中進行
public class MainActivity extends Activity {private Button sendMessage = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);sendMessage = (Button) findViewById(R.id.sendMessage);sendMessage.setOnClickListener(new clientListener());}class clientListener implements OnClickListener{@Overridepublic void onClick(View v) {HandlerThread handlerThread = new HandlerThread("handler_Thread"); handlerThread.start(); ClientHandler clientHandler = new ClientHandler(handlerThread.getLooper()); Message msg = clientHandler.obtainMessage(); Bundle bundle = new Bundle(); msg.setData(bundle); // 將msg發送到目標對象,即產生msg對象的Handler對象 msg.sendToTarget();}}class ClientHandler extends Handler { public ClientHandler() { } public ClientHandler(Looper looper) { super(looper); } @Override public void handleMessage(Message msg) { super.handleMessage(msg); Bundle bundle = msg.getData(); try {// 首先建立一個DatagramSocket對象DatagramSocket socket = new DatagramSocket(4572);// 建立一個InetAddreeInetAddress serverAddress = InetAddress.getByName("192.168.77.215");String str = "hello";byte data[] = str.getBytes();// 建立一個DatagramPacket對象,並指定要講這個資料包發送到網路當中的哪個地址,以及連接埠號碼DatagramPacket packet = new DatagramPacket(data,data.length, serverAddress, 4572);// 調用socket對象的send方法,發送資料socket.send(packet);socket.close();Toast.makeText(MainActivity.this, "資料已發送", Toast.LENGTH_SHORT).show();} catch (Exception e) {// TODO: handle exceptione.printStackTrace();} } }}
用戶端需要的許可權
<uses-permission android:name="android.permission.INTERNET" />
本文出自 “阿凡達” 部落格,請務必保留此出處http://shamrock.blog.51cto.com/2079212/1582887
Android學習筆記-網路編程