Mars视频笔记——Socket编程

Socket编程

www.mars-droid.com

1 什么是Socket

Android使用的是Java的Socket模型

Socket原意插座 通常称作“套接字” 用于描述IP地址和端口,是一个通信链的句柄

应用程序通过“套接字”向网络发出请求火应答网络请求

 

2 Socket基本通信模型

客户端(Socket) 输出流 OutputStream ---> 服务端(ServerSocket) 输出流 InputStream

服务端(ServerSocket) 输出流 OutputStream ---> 客户端(Socket) 输入流 InputStream

 

3 使用基于TCP协议的Socket

 

*ServerThread extends Thread的run方法 服务器端代码

声明一个ServerSocket对象 监听指定端口

ServerSocket serverSocket=new ServerSocket(端口);

调用serverSocket的accept方法,接受客户端所发送的请求

Socket socket=serverSocket.accept();//返回一个socket 代表一个连接

从socket中得到InputStream对象

InputStream inputStream=socket.getInputStream();

byte buffer[]=new byte[1024*4];

int temp=0;

从InputStream读取数据

while((temp=inputStream.read(buffer))!=-1){

Syestem.out.println(new String(buffer,0,temp));

}

*客户端代码

创建一个Socket对象,指定服务器端IP地址和端口

Socket socket=new Socket("ip地址",端口);

使用InputStream读取一个文件

InputStream inputStream=new FileInputStream("文件路径");

从Socket中得到一个OutputStream

OutputStream outputStream=socket.getOutputStream();

byte buffer[]= new byte[1024*4];

int temp=0;

将InputStream中读出,并写入到OutputStream中

while((temp=inputStream.read(buffer))!=-1){

outputStream.write(buffer,0,temp);

}

outputStream.flush();

 

4 使用基于UDP协议的Socket

 

*服务器端代码

创建一个DatagramSocket对象,指定端口号

DatagramSocket socket=new DatagramSocket(端口);

byte data[]=new byte[1024];

创建一个空的DatagramPacket对象 用于接受数据

DatagramPacket packet=new DatagramPacket(data,data.length);

使用receive方法接受客户端发送的数据(有些类似于accept 也是阻塞的)

socket.receive(packet);

System.out.println(new String(packet.getData(),packet.getOffset(),packet.getLength()));

 

*客户端代码

创建一个DatagramSocket对象

DatagramSocket socket=new DatagramSocket(端口);

创建一个InetAddress 代表网络中的一个地址

InetAddress serverAddress=InetAddress.getByName("IP");

String str="hello";

byte data[]=str.getBytes();

创建DatagramPacket对象 指定发送的地址和端口号

DatagramPacket packet=new DatagramPacket(data,data.length,serverAddress,端口);

调用socket对象的send方法,发送数据

socket.send(packet);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值