首页 > 代码库 > Android学习笔记-网络编程

Android学习笔记-网络编程

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;

	@Override
	protected 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{

		@Override
		public 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);
				// 创建一个InetAddree
				InetAddress 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 exception
				e.printStackTrace();
			}
        }
    }
}

客户端需要的权限

  <uses-permission android:name="android.permission.INTERNET" />


本文出自 “阿凡达” 博客,请务必保留此出处http://shamrock.blog.51cto.com/2079212/1582887

Android学习笔记-网络编程