十.TCP与UDP发送和接收数据的简单实现

 

一.在android里实现网络通讯会用到如下的网络操作权限。

<!--允许应用程序改变网络状态-->
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>

<!--允许应用程序改变WIFI连接状态-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>

<!--允许应用程序访问有关的网络信息-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

<!--允许应用程序访问WIFI网卡的网络信息-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

<!--允许应用程序完全使用网络-->
<uses-permission android:name="android.permission.INTERNET"/>


二.在服务端创建一个TCP连接的监听。用于接收TCP客户端传输的数据。

//在logcat中打印提示,开始监听TCP

System.out.println("Accpet TCP");

//创建ServerSocket对象,并设置端口号

ServerSocket  serverSocket = new ServerSocket(1984);

//使用ServerSocket中的accpet方法开始阻塞监听1984端口

Socket socket = serverSocket.accept();

//创建InputStream对象,并从socket中获取数据

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));

}


三.创建一个TCP客户端,用于发送数据。

//创建一个Socket对象,并指定服务端的IP及端口号

Socket socket = new  Socket("192.168.1.32" ,1984);
//创建一个InputStream用户读取要发送的文件。

InputStream inputStream = new FileInputStream("e://a.txt");

//获取Socket的OutputStream对象用于发送数据。

OutputStream outputStream = socket.getOutputStream();
//创建一个byte类型的buffer字节数组,用于存放读取的本地文件

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

int temp = 0;

//循环读取文件

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

//把数据写入到OuputStream对象中

outputStream.write(buffer ,0 ,temp);

}

//发送读取的数据到服务端

outputStream.flush();


四.在服务端创建一个UDP的监听,用于接收UDP连接的数据接收

//打印一个提示

System.out.println("accpet UDP");
//创建一个DatagramSocket对象,并指定监听端口。(UDP使用DatagramSocket)

DatagramSocket socket = new DatagramSocket(1985);

//创建一个byte类型的数组,用于存放接收到得数据

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

//创建一个DatagramPacket对象,并指定DatagramPacket对象的大小

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

//读取接收到得数据

socket.receive(packet);

//把客户端发送的数据转换为字符串。

//使用三个参数的String方法。参数一:数据包 参数二:起始位置 参数三:数据包长

String result = new String(packet.getData(),packet.getOffset() ,packet.getLength());

//打印读取到得数据

System.out.println("UDP Data:" + result);


五.创建一个UDP客户端,用于发送数据。

//创建DatagramSocket对象并指定服务端的端口号

DatagramSocket socket = new DatagramSocket(1985);

//创建一个Inet4Address对象
//需要使用Inet4Address.getByName把IP地址转换为网络地址

//有些java版本可以使用InetAddress

Inet4Address serverAddress = (Inet4Address) Inet4Address.getByName("192.168.1.32");
//设置要发送的字符串,

String str = "hello psuaije";

//把字符串str字符串转换为字节数组

byte data[] = str.getBytes();

//创建一个DatagramPacket对象,用于发送数据。
//参数一:要发送的数据  参数二:数据的长度  参数三:服务端的网络地址  参数四:网络地址

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

//把数据发送到服务端。

socket.send(packet); 1


六.TCP使用的是流的方式发送,UDP是以包的形式发送。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值