java 安卓客户端开发_《安卓网络编程》之第一篇 java环境下模拟客户端、服务器端...
1、Socket简介
在网络上的两个程序通过一个双向的通信连接实现数据的交换,这个双向链路的一端称为一个Socket。Socket通常用来实现客户方和服务方的连接。Socket是TCP/IP协议的一个十分流行的编程界面,一个Socket由一个IP地址和一个端口号唯一确定。
在Java环境下,Socket编程主要是指基于TCP/IP协议的网络编程。也就是说在Java环境下我们实现基于TCP/IP协议的网络编程需要采用Socket机制。Socket编程比基于URL的网络编程提供了更高的传输效率、更强大的功能和更灵活的控制,但是却要更复杂一些。由于Java本身的特殊性,Socket编程在Java中可能已经是层次最低的网络编程接口,在Java屮要直接操作协议中更低的层次,需要使用Java的本地方法调用 (JNI),在这里就不予讨论了。
Android中进行Socket编程与普通Java程序所进行的Socket编程的方式保持一致,不同的是数据的来源以及显示上有所区别。采用Java语言开发的一些网络编程的应用比如最经典的聊天室应用可以很容易地移植到Android平台上。而由于TCP协议要比UDP协议的应用广泛,如常用的HTTP、FTP、SMTP等协议都是采用TCP协议,因此这里主要介绍Android中基于 TCP协议的Socket编程。
Socket通常用来实现C/S结构。使用Socket进行Client/Server程序设计的一般连接过程是这样的:Server端监听某个端口是否有连接请求,Client端向Server端发出连接请求,Server端向Client端发回Accept (接受)消息,一个连接就建立起来了。Server端和Client端都可以通过Send、Write等方法与对方通信。Java在包java.net中提供了两个类Socket和ServerSocket,分别用来表示双向连接的客户端和服务端。
2、Socket和ServerSocket
在Java网络通信技术中,有一对非常般配的技术——Socket和ServerSocket
网络编程可以分为创建Socket、打开连接Socket的输入流和输出流,对Socket进行编程,关闭Socket。
ServerSocket用于服务器端,accept方法会返回一个客户端的Socket对象实例。这个时候服务器和客户端的连接就建立成功啦。
3、程序实现及效果:
客户端程序:
1 importjava.io.BufferedReader;2 importjava.io.IOException;3 importjava.io.InputStream;4 importjava.io.InputStreamReader;5 importjava.io.OutputStream;6 importjava.io.PrintStream;7 importjava.net.ConnectException;8 importjava.net.Socket;9
10 public classKeSocket11 {12 public static voidmain(String args[])13 {14 try
15 {16 Socket s= new Socket("127.0.0.1",2007);17 InputStream is =s.getInputStream();18 OutputStream os =s.getOutputStream();19
20 PrintStream ps = newPrintStream(os);21 ps.println("hello");22 //DataInputStream dis = new DataInputStream(is);23 //String request = dis.readLine();
24 BufferedReader dis = new BufferedReader(newInputStreamReader(is));25 String request =dis.readLine();26 System.out.println(request);27 s.close();28 }29 catch(ConnectException e)30 {31 System.out.println("异常"+e);32 }33 catch(IOException ee)34 {35 System.out.println("异常"+ee);36 }37 catch(Exception eee)38 {39 System.out.println("异常"+eee);40 }41 }42 }
View Code
服务器端程序:
1 importjava.io.BufferedReader;2 importjava.io.IOException;3 importjava.io.InputStream;4 importjava.io.InputStreamReader;5 importjava.io.OutputStream;6 importjava.io.PrintStream;7 importjava.net.ServerSocket;8 importjava.net.Socket;9
10
11 public classServerSocket112 {13 public static voidmain(String args[])14 {15 try
16 {17 ServerSocket ss = new ServerSocket(2007);18 while(true) {19 Socket s =ss.accept();20 InputStream is=s.getInputStream();21 OutputStream os=s.getOutputStream();22
23 BufferedReader dis = new BufferedReader(newInputStreamReader(is));24 String request =dis.readLine();25 System.out.println(request);26 PrintStream ps = newPrintStream(os);27 ps.println("Bye");28 s.close();29 ss.close();30 }31 }32 catch(IOException e)33 {34 System.out.println("异常"+e);35 }36 catch(Exception ee)37 {38 System.out.println("异常"+ee);39 }40 }41 }
View Code
不打开服务器端,显然客户端连接失败:
异常java.net.ConnectException: Connection refused: connect
打开服务器端程序后,
服务器端显示:
hello
异常java.net.SocketException: Socket is closed
客户端显示:
Bye
4、多客户端连接
在实际的应用中,往往有许多客户端向服务器发送请求,服务器会启动一个专门的服务线程来响应客户端的请求,同时服务器本省在启动线程之后,马上进入监听状态。
DuoServer.java 演示多客户请求服务器的过程,代码如下:
1 import java.net.*;2 import java.io.*;3 public classDuoServer4 {5 public static voidmain(String args[])6 {7 boolean connected=true;8 try
9 {10 ServerSocket ss = new ServerSocket(2007);11 int clientnum = 0;12 while(connected) {13 ServerThread st = newServerThread(ss.accept(),clientnum);14 st.start();15 clientnum++;16 System.out.println(clientnum);17
18 }19 }20 catch(Exception e)21 {22 System.out.println("异常"+e);23 }24 }25 }26 class ServerThread extendsThread27 {28 privateSocket s;29 intclientnum;30 public ServerThread(Socket s,intnum)31 {32 this.s=s;33 clientnum=num+1;34 }35 public voidrun()36 {37 try
38 {39 InputStream is=s.getInputStream();40 OutputStream os=s.getOutputStream();41 BufferedReader dis = new BufferedReader(newInputStreamReader(is));42 String request=dis.readLine();43 System.out.println(request);44 PrintStream ps=newPrintStream(os);45 ps.println("Bye");46 s.close();47 }48 catch(Exception e)49 {50 System.out.println("异常"+e);51 }52 }53 }
多次运行客户端程序,调用3次后可以看到服务器端结果:
1hello2hello3hello
java 安卓客户端开发_《安卓网络编程》之第一篇 java环境下模拟客户端、服务器端...相关推荐
- java 模板接口开发_微信公众平台 发送模板消息(Java接口开发)
前言:最近一直再弄微信扫码推送图文消息和模板消息发送,感觉学习到了不少东西.今天先总结一下微信公众平台模板消息的发送.因为这个自己弄了很久,开始很多地方不明白,所以今天好好总结一下. 微信公众平台技术 ...
- C++网络编程(第一篇)
文章目录 前言 一.网络结构模式 C/S结构 B/S结构 二.MAC地址 三.IP地址 IP 地址编址方式 A类IP地址 B类IP地址 C类IP地址 D类IP地址 特殊的IP地址 子网掩码 四. 端口 ...
- java 开发文档协作_Java 网络编程---分布式文件协同编辑器设计与实现
目录: 第一部分:Java网络编程知识 (一)简单的Http请求 一般浏览网页时,使用的时Ip地址,而IP(Internet Protocol,互联网协议)目前主要是IPv4和IPv6. IP地址是一 ...
- 用Netty开发中间件:网络编程基础
用Netty开发中间件:网络编程基础 <Netty权威指南>在网上的评价不是很高,尤其是第一版,第二版能稍好些?入手后快速翻看了大半本,不免还是想对<Netty权威指南(第二版)&g ...
- Java 单例模式 、 生产者消费者 、 网络编程
目录 1. 单例模式 2. 面试题--生产者和消费者 3. 网络编程 3.1概述 3.2网络基础 3.3 网路通信 3.4.1 通信要素 1 :IP地址 3.4.2 通信要素 2: 端口号 3.5 ...
- Java基础复习笔记系列 九 网络编程
Java基础复习笔记系列之 网络编程 学习资料参考: 1.http://www.icoolxue.com/ 2. 1.网络编程的基础概念. TCP/IP协议:Socket编程:IP地址. 中国和美国之 ...
- 浅谈JAVA中如何利用socket进行网络编程(二)
转自:http://developer.51cto.com/art/201106/268386.htm Socket是网络上运行的两个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以 ...
- 20165230 《Java程序设计》实验五《网络编程与安全》实验报告
20165230 <Java程序设计>实验五<网络编程与安全>实验报告 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:田坤烨 学号:20165230 成绩: ...
- 2018-2019-2 20175227张雪莹《Java程序设计》实验五 《网络编程与安全》
2018-2019-2 20175227张雪莹<Java程序设计> 实验五 <网络编程与安全> 实验报告封面 课程:Java程序设计 班级:1752班 姓名:张雪莹 学号:20 ...
最新文章
- DeepMind 最新论文解读:首次提出离散概率树中的因果推理算法
- tf-idf:信息检索
- LIBSVM使用方法
- docker登录mysql数据库_Docker下搭建mysql数据库
- 使用Fastjson提示No serializer found for class
- 前腾讯AI Lab主任张潼加盟创新工场,出任港科大创新工场联合实验室主任
- MyBatis数据库连接的基本使用-补充Mapper映射器
- LeetCode—Python版数组简单题(二)
- Python让繁琐工作自动化——chapter12 处理Excel电子表格
- 【CF Contest-1228 E】Another Filling the Grid【容斥】
- Win7 专业版安装中文包、汉化处理
- 数据库:数据库设计与数据建模及建模工具(PowerDesigner)
- 正则表达式匹配原则和常用检验表达式
- python中apply函数的使用
- GitHub下载 无法分配请求的地址_百度网盘破限速软件PanDownload复活了!60MB/s!附下载地址...
- 使用Intellij来实践测试驱动开发 TDD Kata
- 转:你不快乐是因为年少时得不到忘不了
- 初探机器学习与评分卡模型
- 问题 F: 超超的自闭意思
- 《西湖梦》 - 洛天依 乐正绫 :OI版