Android网络编程基础
Android网络编程只TCP通信
TCP 服务器端工作的主要步骤如下。
步骤1 调用ServerSocket(int port)创建一个ServerSocket,并绑定到指定端口上。
步骤2 调用accept(),监听连接请求,如果客户端请求连接,则接受连接,返回通信套接字。
步骤3 调用Socket 类的getOutputStream() 和getInputStream() 获取输出和输入流,开始网络数据的发送和接收。
步骤4 关闭通信套接字。
服务器端:
package com.jiao.socketdemo; import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InterruptedIOException;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket; public class Main {
public static int TCP_SERVER_PORT = 5556; // 声明一个socket来接受客户端连接 public static void main(String[] args) { start();
} private static void start() {
ServerSocket serverSocket = null;
try {
// TCP_SERVER_PORT 为指定的绑定端口,为int 类型
serverSocket = new ServerSocket(TCP_SERVER_PORT);
// 监听连接请求
Socket socket = serverSocket.accept();
// 写入读Buffer 中 // 获取输入流
BufferedReader in = new BufferedReader(new InputStreamReader(
socket.getInputStream())); // 放到写Buffer 中 // 获取输出流
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(
socket.getOutputStream())); // 读取接收信息,转换为字符串
String incomingMsg = in.readLine()
+ System.getProperty("line.separator"); System.out.println("接受到的信息:" + incomingMsg);
// 生成发送字符串
String outgoingMsg = "goodbye from port " + TCP_SERVER_PORT
+ System.getProperty("line.separator");
// 将发送字符串写入上面定义的BufferedWriter 中
out.write(outgoingMsg); System.out.println("发送出去的信息" + outgoingMsg);
// 刷新,发送
out.flush();
// 关闭
socket.close();
} catch (InterruptedIOException e) {
// 超时错误
e.printStackTrace();
// IO 异常
} catch (IOException e) {
// 打印错误
e.printStackTrace();
} finally {
// 判定是否初始化ServerSocket 对象,如果初始化则关闭serverSocket
if (serverSocket != null) {
try {
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} } }
客户端:
package com.example.socketclient; import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import android.app.Activity;
import android.os.Bundle; public class MainActivity extends Activity {
public static int TCP_SERVER_PORT = 5556; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); new Thread() {
public void run() {
actStart();
};
}.start();
} private void actStart() {
try {
// 初始化Socket,TCP_SERVER_PORT 为指定的端口,int 类型r
Socket socket = new Socket("这里为服务器的ip", TCP_SERVER_PORT);
// 获取输入流
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
// 生成输出流
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
// 生成输出内容
String outMsg = "Jiao_Test" + TCP_SERVER_PORT+ System.getProperty("line.separator");
// 写入
out.write(outMsg);
// 刷新,发送
out.flush();
// 获取输入流
String inMsg = in.readLine() + System.getProperty("line.separator");
// Log.i("TcpClient", "received: " + inMsg);
System.out.println("接收服务器返回:"+inMsg);
// 关闭连接
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} } }
二:UDP传输方式
步骤1 调用DatagramSocket(int port) 创建一个数据报套接字,并绑定到指定端口上。
步骤2 调用DatagramPacket(byte[]buf,int length),建立一个字节数组以接收UDP 包。
步骤3 调用DatagramSocket 类的receive(),接受UDP 包。
步骤4 关闭数据报套接字。
服务端代码
package com.example.socketudp; import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException; import android.app.Activity;
import android.os.Bundle; public class MainActivity extends Activity {
private final static int MAX_UDP_DATAGRAM_LEN = 1024;
private final static int UDP_SERVER_PORT = 5556; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); new Thread() {
public void run() {
actStart();
}
}.start();
} private void actStart() {
// 接收的字节大小,客户端发送的数据不能超过MAX_UDP_DATAGRAM_LEN
byte[] lMsg = new byte[MAX_UDP_DATAGRAM_LEN];
// 实例化一个DatagramPacket 类
DatagramPacket dp = new DatagramPacket(lMsg, lMsg.length);
// 新建一个DatagramSocket 类
DatagramSocket ds = null;
try {
// UDP 服务器监听的端口
ds = new DatagramSocket(UDP_SERVER_PORT);
// 准备接收数据
ds.receive(dp);
} catch (SocketException e) {
e.printStackTrace(); } catch (IOException e) {
e.printStackTrace();
} finally {
// 如果ds 对象不为空,则关闭ds 对象
if (ds != null) {
ds.close();
} }
}
}
客户端代码:
package com.example.socketclient; import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
import android.app.Activity;
import android.os.Bundle; public class MainActivity extends Activity {
public static int UDP_SERVER_PORT = 5556; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); new Thread() {
public void run() {
actStart();
};
}.start();
} private void actStart() {
// 定义需要发送的信息
String udpMsg = "jiao udp test" + UDP_SERVER_PORT;
// 新建一个DatagramSocket 对象
DatagramSocket ds = null;
try {
// 初始化DatagramSocket 对象
ds = new DatagramSocket();
// 初始化InetAddress 对象
InetAddress serverAddr = InetAddress.getByName("服务器的ip");
DatagramPacket dp;
// 初始化DatagramPacket 对象
dp = new DatagramPacket(udpMsg.getBytes(), udpMsg.length(),serverAddr, UDP_SERVER_PORT);
// 发送
ds.send(dp);
}
// 异常处理
// Socket 连接异常
catch (SocketException e) {
e.printStackTrace();
// 不能连接到主机
} catch (UnknownHostException e) {
e.printStackTrace();
// 数据流异常
} catch (IOException e) {
e.printStackTrace();
// 其他异常
} catch (Exception e) {
e.printStackTrace();
} finally {
// 如果DatagramSocket 已经实例化,则需要将其关闭
if (ds != null) {
ds.close();
}
}
}
}
Android网络编程基础的更多相关文章
- Android 网络编程基础之简单聊天程序
前一篇讲了Android的网络编程基础,今天写了一个简单的聊天程序分享一下 首先是服务端代码: package com.jiao.socketdemo; import java.io.Buffered ...
- iOS开发网络篇—网络编程基础
iOS开发网络篇—网络编程基础 一.为什么要学习网络编程 1.简单说明 在移动互联网时代,移动应用的特征有: (1)几乎所有应用都需要用到网络,比如QQ.微博.网易新闻.优酷.百度地图 (2)只有通过 ...
- Android网络编程系列 一 TCP/IP协议族
在学习和使用Android网路编程时,我们接触的仅仅是上层协议和接口如Apache的httpclient或者Android自带的httpURlconnection等等.对于这些接口的底层实现我们也有必 ...
- Android网络编程系列 一 Socket抽象层
在<Android网络编程>系列文章中,前面已经将Java的通信底层大致的描述了,在我们了解了TCP/IP通信族架构及其原理,接下来我们就开始来了解基于tcp/ip协议层的Socket抽 ...
- 【Android 应用开发】Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介
Android 网络编程相关的包 : 9 包, 20 接口, 103 类, 6 枚举, 14异常; -- Java包 : java.net 包 (6接口, 34类, 2枚举, 12异常); -- An ...
- 【Android 应用开发】Android 网络编程 API笔记 - java.net 包相关 接口 api
Android 网络编程相关的包 : 9 包, 20 接口, 103 类, 6 枚举, 14异常; -- Java包 : java.net 包 (6接口, 34类, 2枚举, 12异常); -- An ...
- Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介
Android 网络编程相关的包 : 9 包, 20 接口, 103 类, 6 枚举, 14异常; -- Java包 : java.net 包 (6接口, 34类, 2枚举, 12异常); -- An ...
- Android 网络编程 API笔记 - java.net 包相关 接口 api
Android 网络编程相关的包 : 9 包, 20 接口, 103 类, 6 枚举, 14异常; -- Java包 : java.net 包 (6接口, 34类, 2枚举, 12异常); -- An ...
- C#网络编程基础知识
C#网络编程基础知识一 1.IPAddress类 用于表示一个IP地址.IPAddress默认构造函数 public IPAddress(long address);一般不用 其中Parse()方法最 ...
随机推荐
- C#读写Json
C#处理json文件主要有两种方式: (1)使用JavaScriptSerializer类,需要引入System.Web.Extension库,并添加下面两个引用: using System.Web; ...
- Spring Remoting: Remote Method Invocation (RMI)--转
原文地址:http://www.studytrails.com/frameworks/spring/spring-remoting-rmi.jsp Concept Overview Spring pr ...
- PowerMock 简介--转载
原文地址:https://www.ibm.com/developerworks/cn/java/j-lo-powermock/ EasyMock 以及 Mockito 都因为可以极大地简化单元测试的书 ...
- EB-SAM9G45裸机程序下载方法
开发板:EB-SAM9G45 这里提供一种裸程序下载的方法. 在官方提供的下载方法中有手动下载和自动下载,它们都离不开SAM-BA软件,而该软件使用比较麻烦,而且操作不当很容易导致电脑蓝屏,还有一个很 ...
- 利用栈实现算术表达式求值(Java语言描述)
利用栈实现算术表达式求值(Java语言描述) 算术表达式求值是栈的典型应用,自己写栈,实现Java栈算术表达式求值,涉及栈,编译原理方面的知识.声明:部分代码参考自茫茫大海的专栏. 链栈的实现: pa ...
- python内置模块(3)
博主所有python文章均为python3.5.1环境. 目录: 1.collections 2.subprocess 3.configparser 4.XML 5.shutil 一. collect ...
- HT图形组件设计之道(一)
HT for Web简称HT提供了涵盖通用组件.2D拓扑图形组件以及3D引擎的一站式解决方案,正如Hightopo官网所表达的我们希望提供:Everything you need to create ...
- C# 文字转声音
添加COM组件引用:Microsoft Speech object library private SpVoice voice; private void button1_Click(object s ...
- 使用Spark分析拉勾网招聘信息(二): 获取数据
要获取什么样的数据? 我们要获取的数据,是指那些公开的,可以轻易地获取地数据.如果你有完整的数据集,肯定是极好的,但一般都很难通过还算正当的方式轻易获取.单就本系列文章要研究的实时招聘信息来讲,能获取 ...
- Scrum 项目 6.0
-------------------------6.0------------------------------------ sprint演示 1.坚持所有的sprint都结束于演示. 团队的成果 ...