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" />
时间: 2024-08-05 15:19:41

Android学习笔记-网络编程的相关文章

Linux程序设计学习笔记----网络编程之网络数据包拆封包与字节顺序大小端

网络数据包的封包与拆包 过程如下: 将数据从一台计算机通过一定的路径发送到另一台计算机.应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation),如下图所示: 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据包(packet),在链路层叫做帧(frame).数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,最后将应用层数据交给应用程序处理. 上图对应两台计算机在同一网段中的情况,

IOS学习笔记 -- 网络编程

一.HTTP协议1.面试题: 聊一下HTTP协议(表达对HTTP协议的看法)* HTTP协议的全称: 超文本传输协议, 定制传输数据的规范(客户端和服务器之间的数据传输规范)* 描述HTTP协议完整的通信过程 2.通信过程1> 请求* 客户端 --> 服务器* 请求的内容a."请求行" : 请求方法\请求资源路径\HTTP协议版本GET /MJServer/login?username=123&pwd=123&method=get&type=JSON

学习笔记——网络编程3(基于TCP协议的网络编程)

TCP协议基础 IP协议是Internet上使用的一个关键协议,它的全称是Internet Protocol,即Internet协议,通常简称IP协议. 使用ServerSocket创建TCP服务器 在两个通信实体没有建立虚拟链路之前,必须有一个通信实体先做出“主动姿态”,主动接收来自其他通信实体的连接请求. Java中能接收其他通信实体连接请求的类是ServerSocket,ServerSocket对象用于监听来自客户端Socket连接,如果没有连接,它将一直处于等待状态. ServerSoc

Linux程序设计学习笔记----网络通信编程API及其示例应用

转载请注明出处, http://blog.csdn.net/suool/article/details/38702855. BSD Socket 网络通信编程 BSD TCP 通信编程流程 图为面向连接的Socket通信的双方执行函数流程.使用TCP协议的通信双方实现数据通信的基本流程如下 建立连接的步骤 1.首先服务器端需要以下工作: (1)调用socket()函数,建立Socket对象,指定通信协议. (2)调用bind()函数,将创建的Socket对象与当前主机的某一个IP地址和TCP端口

Android学习笔记_78_ Android开发中使用软引用和弱引用防止内存溢出

在<Effective Java 2nd Edition>中,第6条"消除过期的对象引用"提到,虽然Java有 垃圾回收机制,但是只要是自己管理的内存,就应该警惕内存泄露的问题,例如的对象池.缓存中的过期对象都有可能引发内存泄露的问题.书中还提到可以用 WeakHashMap来作为缓存的容器可以有效解决这一问题.之前也确实遇到过类似问题,但是没有接触过"弱引用"相关的问题,于是查阅了一些资料. <Java 理论与实践: 用弱引用堵住内存泄漏>

Pro Android学习笔记(十):了解Intent(上)

Android引入了Intent的概念来唤起components,component包括:1.Activity(UI元件) 2.Service(后台代码) 3.Broadcast receiver(处理广播消息的代码) 4.Content provider(抽象数据的代码) Intent基本含义 intent是通知平台处理(唤起)的动作.Android唤起的动作将取决于注册了什么动作.例如我们有个简单的Activity:IntentBaiscViewActivity.在AndroidManife

Android学习笔记(四七):Content Provider初谈和Android联系人信息

Content Provider 在数据处理中,Android通常使用Content Provider的方式.Content Provider使用Uri实例作为句柄的数据封装的,很方便地访问地进行数据的增.删.改.查的操作.Android并不提供所有应用共享的数据存储,采用content Provider,提供简单便捷的接口来保持和获取数据,也可以实现跨应用的数据访问.简单地说,Android通过content Provider从数据的封装中获取信息. Content provider使用Uri

Android学习笔记(四五):互联网通信-HttpClient、XML解析(W3C)

前几日Android发布了4.0 Icecream,昨天上网发现Begining Book中有Edition 3的版本,比对一下,还是有相当的改动,不仅仅增加了tablet的部分,对原有的章节有有一些修订,前后的调整等等.先按Edtion 2的顺序看,相同章节的看Edtion 3,然后回头看Edition 3的Chapter 24.25(E2的36).26.27.28.29.44.45.46.47几个新增章节.同时将模拟器改为Android 2.3的版本,已适应可能新增的改动. 访问Intern

Android学习笔记(四三):文件访问

之前我们学习了通过preference和SQLite数据库进行数据存储,也可以通过文件方式.文件可以是在应用打包时预置,也可以是应用所生成. 文件访问有两种方式:一:静态数据的文件可以防止在res/raw中,这些文件是只读的,只有在应用版本升级的时候进行修改,或者我们先读出这些数据,通过 reference的方式来处理,这样以后可以进行修订,但是这种方式,会有两份数据保存.二:另一种方式是通过URL访问文件,动态数据的读取也可以采用SQLite3的方式. res/raw/下静态文件的读取 在re