Android之使用TCP和URL协议进行网络编程

 手机本身是作为手机终端使用的,因此它的计算能力,存储能力都是有限的。它的主要优势是携带方便,可以随时打开,而且手机通常总是处于联网状态。因此网络支持对于手机应用非常重要。

       Android完全支持JDK本身的TCP,UDP网络通信API,也可以使用ServerSocket,Socket来建立基于TCP/IP协议的网络通信,也可以使用DatagramSocket,Datagrampacket来建

立基于UDP协议的网络通信。Android也支持JDK提供的URL,URLConnection等网络通信API。Android还内置了HttpClient,和HttpUrlConnection这样可以非常方便地发送HTTP请求,并获取Http响应。

      

 ——基于TCP协议的编程

        使用Socket,ServerSocket编程:

        使用多线程,handler机制完成网络编程.

        注意:由于手机无线上网的IP地址通常都是由移动运营公司动态分配的,一般不会有自己固定的IP地址,因此很少在手机上运行服务器端,服务器端通常运行在有固定IP的服务器上。

        ——访问网络资源必须放在子线程中

        ——需要添加访问网络的权限

        ——IP地址,不能写成127.0.0.1.

        ——使用Handler机制解析返回的数据

        ——注意解决乱码问题

 

——使用URL进行网络编程

       ——使用URL访问网络资源

       URL对象代表统一资源定位符。它是指向互联网中的资源。该资源可以使简单的文件或目录。也可以是对更复杂的对象的引用。

       URL的格式:protocol://host:port/resourceName

       可以使用构造器创建URL对象,一旦获得URL对象,可以调用如下的方法访问该URL对应的资源:


  String getFile():获取URL的资源名

  String getHost():获取URL的主机名

  String getPath():获取URL的路径部分

  int getPort():获取URL的端口号

  String getProtocol():获取URL的协议名称

  String getQuery():获取URL的查询字符串部分

  InputStream url.openStream():打开URL的连接,返回一个读取该资源的InputStream。


代码编写:

1.服务器的编写:

使用Socket和ServerSocket:

public class serverTest {
  public static void main(String[] args) {
	try {
		ServerSocket serverSocket=new ServerSocket(7777);
		System.out.println("服务器已经在7777端口上启动了");
		while (true) {
			//有阻塞的功能,拿不到socket下面的方法也不会执行
			Socket socket=serverSocket.accept();
			System.out.println("有客户端发出请求了");
			new ServerThread(socket).start();
		}
	} catch (Exception e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}
}

ServerThread继承Thread:

public class ServerThread extends Thread{

	private Socket socket;
	OutputStream outputStream;
	
	public ServerThread(Socket socket) {
		this.socket=socket;
	}
	@Override
	public void run() {
		// TODO Auto-generated method stub
		try {
			outputStream=socket.getOutputStream();
			outputStream.write(("服务器端的时间"+new Date()).getBytes("UTF-8"));
			outputStream.flush();
			outputStream.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		super.run();
	}
	
}
2.客户端的编写:

关键代码:

	public void click(View view){
		new Thread(){
			public void run() {
				try {
					//客户端从服务端获取数据
					Socket client=new Socket("169.254.244.141", 7777);
					BufferedReader bufferedReader=
							new BufferedReader
							(new InputStreamReader
									(client.getInputStream()));
					String text=bufferedReader.readLine();
					//tv.setText(text);
					//线程复用
					Message msg= Message.obtain();
					msg.what=0x123;
					msg.obj=text;
					handler.sendMessage(msg);
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} 
			};
		}.start();
	}
从服务器端得到时间~

效果图如下:



源码:下载


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值