Android学习笔记(十八) Socket
Socket在计算机网络中的概念是指套接字,包含IP地址和端口号。在Java编程中Socket是一个类,用来实现数据传输(同样可以理解为“套接字”)。传输的协议包括UDP和TCP,前者为不可靠的无连接的传输,后者为可靠的有连接的传输。实现Socket时要分客户端和服务端。
1、TCP服务端
- 创建一个ServerSocket对象,并让这个对象在特定端口监听。
- 调用ServerSocket的accept()方法,接受客户端所发送的请求。
- 从Socket当中得到InputStream对象。
- 使用InputStream接受从客户端发送来的数据。
class ServerThread extends Thread{
public void run(){
//声明一个ServerSocket对象
ServerSocket serverSocket = null;
try{
//创建一个ServerSocket对象,并让这个对象在4567端口监听
serverSocket = new ServerSocket(4567);
//调用ServerSocket的accept()方法,接受客户端所发送的请求
Socket socket = serverSocket.accept();
//从Socket当中得到InputStream对象
InputStream inputStream = socket.getInputStream();
byte[] buffer = new byte[1024*4];
int temp = 0;
while((temp = inputStream.read(buffer)) != -1){
System.out.println(new String(buffer,0,temp));
}
}catch(IOException e){
e.printStackTrace();
}
finally{
try{
serverSocket.close();
}catch(IOException e){
e.printStackTrace();
}
}
}
}
2、TCP客户端
- 创建一个Socket对象,指定服务器端的IP地址和端口号。
- 使用InputStream读取硬盘上的文件。
- 从Socket当中得到OutputStream。
- 读取InputStream中的数据,存放到OutputStream中(因为OutputStream是Socket得来的,所以客户端写到这里就可以了,不需要send)。
public class TCPClient{
public static void main(String[] args){
try{
//创建一个Socket对象,指定服务器端的IP地址和端口号
Socket socket = new Socket("192.168.1.104",4567);
//使用InputStream读取硬盘上的文件
InputStream inputStream = new FileInputStream("f://file/words.txt");
//从Socket当中得到OutputStream
OutputStream outputStream = socket.getOutputStream();
byte[] buffer = new byte[4*1024];
int temp = 0;
while((temp = inputStream.read(buffer)) != -1){
outputStream.write(buffer, 0, temp);
}
outputStream.flush();
}catch(Exception e){
e.printStackTrace();
}
}
}
3、UDP服务端
- 创建一个DatagramSocket对象,并指定监听的端口号。Datagram即为报文。
- 创建一个空的DatagramPacket对象。
- 使用receive方法接受客户端所发送的数据。
class ServerThread extends Thread{
public void run() {
try{
//创建一个DatagramSocket对象,并指定监听的端口号
DatagramSocket socket = new DatagramSocket(4567);
//创建一个空的DatagramPacket对象
byte data[] = new byte[1024];
DatagramPacket packet = new DatagramPacket(data, data.length);
//使用receive方法接受客户端所发送的数据
socket.receive(packet);
System.out.println(packet.getLength());
}catch(Exception e){
e.printStackTrace();
}
}
}
4、UDP客户端
- 首先创建一个DatagramSocket对象
- 创建一个InetAddress(InetAddress是Java对IP地址的封装)
- 创建一个DatagramPacket对象,并指定要将这个数据包发送到网络当中的哪个地址,以及端口号
- 调用socket对象的send()方法,发送数据
public class UDPClient{
public static void main(String[] args){
try{
//首先创建一个DatagramSocket对象
DatagramSocket socket = new DatagramSocket(4567);
//创建一个InetAddress
InetAddress serverAddress = InetAddress.getByName("192.168.1.104");
String str = "hello";
byte data[] = str.getBytes();
//创建一个DatagramPacket对象,并指定要将这个数据包发送到网络当中的哪个地址,以及端口号
DatagramPacket packet = new DatagramPacket(data, data.length, serverAddress,4567);
//调用socket对象的sent()方法,发送数据
socket.send(packet);
}catch(Exception e){
e.printStackTrace();
}
}
}
Android学习笔记(十八) Socket的更多相关文章
- python3.4学习笔记(十八) pycharm 安装使用、注册码、显示行号和字体大小等常用设置
python3.4学习笔记(十八) pycharm 安装使用.注册码.显示行号和字体大小等常用设置Download JetBrains Python IDE :: PyCharmhttp://www. ...
- 【转】 Pro Android学习笔记(八八):了解Handler(2):什么是Handler
文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 之前我们有一篇很好的博文<Andro ...
- 【转】 Pro Android学习笔记(八二):了解Package(1):包和进程
文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 在之前,我们已经学习了如何签发apk,见P ...
- 【转】 Pro Android学习笔记(八十):服务(5):访问远程服务
目录(?)[-] Client的AIDL文件 Client的代码 建立连接 请求服务 断开连接 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://bl ...
- Android学习笔记(八)——四种基本布局
//此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 布局是一种可用于放置很多控件的容器,它可以按照一定的规律调整内部控件的位置,或是嵌套子布局,从而编写出精美的界 ...
- (C/C++学习笔记) 十八. 继承和多态
十八. 继承和多态 ● 继承的概念 继承(inheritance): 以旧类为基础创建新类, 新类包含了旧类的数据成员和成员函数(除了构造函数和析构函数), 并且可以派生类中定义新成员. 形式: cl ...
- 【转】 Pro Android学习笔记(八九):了解Handler(3):延迟执行小例子
目录(?)[-] 小例子 Handler的处理 Activity的代码片段 后台线程和UI的互动 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://b ...
- 【转】 Pro Android学习笔记(八六):了解Package(5):使用lib
目录(?)[-] 在项目中使用lib 源代码 了解一些机制 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowin ...
- 【转】 Pro Android学习笔记(八四):了解Package(3):包间数据共享
目录(?)[-] 共享User ID的设置 共享资源例子 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowing ...
- 【转】 Pro Android学习笔记(八五):了解Package(4):lib项目
目录(?)[-] 什么是lib项目 小例子 Lib的实现 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowing ...
随机推荐
- 目录操作(PHP)
1.创建目录(文件夹)mkdir("./test");2.删除目录(文件夹)只能删除空的文件夹rmdir("./test");3.移动目录(文件夹)rename ...
- 如何在chrome上设置Bing为默认搜索引擎,在设置中无法直接设置
- python-dev 安装错误
/******************************************************************** * python-dev 安装错误 * 说明: * 今天在安 ...
- Flask app.config 的配置
原理如下: image.png 1.通过调用自定义config.py文件中config字典,可以得到一个类, 这个类里面定义的都是类变量,这些变量就是自定义的一些配置项. 如下config.py ...
- appium九宫格解锁错误提示:The coordinates provided to an interactions operation are invalid解决办法
原文地址:http://blog.csdn.net/qqtMJK/article/details/77838814 今天做自动化解锁9宫格,发现swipe不能满足需求,于是用TouchAction去实 ...
- HBase之七:事务和并发控制机制原理
作为一款优秀的非内存数据库,HBase和传统数据库一样提供了事务的概念,只是HBase的事务是行级事务,可以保证行级数据的原子性.一致性.隔离性以及持久性,即通常所说的ACID特性.为了实现事务特性, ...
- 1-1 课程导学 & 1-2 项目需求分析,技术分解.
1-1 课程导学 1-2 项目需求分析,技术分解. 要有一定的dart基础,了解安卓和ios的一些普通的开发
- ARM汇编中ldr伪指令和ldr指令(转载)
转自:http://blog.csdn.net/ce123_zhouwei/article/details/7182756 ARM是RISC结构,数据从内存到CPU之间的移动只能通过L/S指令来完成, ...
- CodeForces 13C【DP】
题意: 给你n个数,每次只能让一个数+1,或者-1,目标是最终使这个序列构成一个非递减的序列: n是5e3,复杂度n^2内.值是1e9: 思路: 可以发现子结构是保证一个区间的非递减, 如果只是dp[ ...
- POJ2369【循环节】
题意: 给一个序列,他需要几步就能变成原来的序列. 思路: 那么就是找一下各个循环节(用dfs随便搞了-),求一下最小公倍数就好了. 贴一发挫code- //#include <bits/std ...