TCP与UDP的简单发送与实现(socket)

来源:互联网 发布:幼儿园 知乎 编辑:程序博客网 时间:2024/05/16 07:26

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

[html] view plaincopy
  1. <!--允许应用程序改变网络状态-->  
  2. <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>  
  3.   
  4. <!--允许应用程序改变WIFI连接状态-->  
  5. <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>  
  6.   
  7. <!--允许应用程序访问有关的网络信息-->  
  8. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>  
  9.   
  10. <!--允许应用程序访问WIFI网卡的网络信息-->  
  11. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>  
  12.   
  13. <!--允许应用程序完全使用网络-->  
  14. <uses-permission android:name="android.permission.INTERNET"/>  


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

[java] view plaincopy
  1. //在logcat中打印提示,开始监听TCP  
  2.   
  3. System.out.println("Accpet TCP");  
  4.   
  5. //创建ServerSocket对象,并设置端口号  
  6.   
  7. ServerSocket  serverSocket = new ServerSocket(1984);  
  8.   
  9. //使用ServerSocket中的accpet方法开始阻塞监听1984端口  
  10.   
  11. Socket socket = serverSocket.accept();  
  12.   
  13. //创建InputStream对象,并从socket中获取数据  
  14.   
  15. InputStream inputStream = socket.getInputStream();  
  16.   
  17. //创建一个字节数组,存放读取到得数据。  
  18.   
  19. byte buffer[] = new byte[1024*4];  
  20.   
  21. int temp = 0;  
  22.   
  23. while ((temp = inputStream.read(buffer)) != -1) {  
  24.   
  25. System.out.println(new String(buffer ,0 ,temp));  
  26.   
  27. }  


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

[java] view plaincopy
  1. //创建一个Socket对象,并指定服务端的IP及端口号  
  2.   
  3. Socket socket = new  Socket("192.168.1.32" ,1984);  
  4. //创建一个InputStream用户读取要发送的文件。  
  5.   
  6. InputStream inputStream = new FileInputStream("e://a.txt");  
  7.   
  8. //获取Socket的OutputStream对象用于发送数据。  
  9.   
  10. OutputStream outputStream = socket.getOutputStream();  
  11. //创建一个byte类型的buffer字节数组,用于存放读取的本地文件  
  12.   
  13. byte buffer[] = new byte[4*1024];  
  14.   
  15. int temp = 0;  
  16.   
  17. //循环读取文件  
  18.   
  19. while ((temp = inputStream.read(buffer)) != -1) {  
  20.   
  21. //把数据写入到OuputStream对象中  
  22.   
  23. outputStream.write(buffer ,0 ,temp);  
  24.   
  25. }  
  26.   
  27. //发送读取的数据到服务端  
  28.   
  29. outputStream.flush();  


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

[java] view plaincopy
  1. //打印一个提示  
  2.   
  3. System.out.println("accpet UDP");  
  4. //创建一个DatagramSocket对象,并指定监听端口。(UDP使用DatagramSocket)  
  5.   
  6. DatagramSocket socket = new DatagramSocket(1985);  
  7.   
  8. //创建一个byte类型的数组,用于存放接收到得数据  
  9.   
  10. byte data[] = new byte[4*1024];  
  11.   
  12. //创建一个DatagramPacket对象,并指定DatagramPacket对象的大小  
  13.   
  14. DatagramPacket packet = new DatagramPacket(data,data.length);  
  15.   
  16. //读取接收到得数据  
  17.   
  18. socket.receive(packet);  
  19.   
  20. //把客户端发送的数据转换为字符串。  
  21.   
  22. //使用三个参数的String方法。参数一:数据包 参数二:起始位置 参数三:数据包长  
  23.   
  24. String result = new String(packet.getData(),packet.getOffset() ,packet.getLength());  
  25.   
  26. //打印读取到得数据  
  27.   
  28. System.out.println("UDP Data:" + result);  


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

[java] view plaincopy
  1. //创建DatagramSocket对象并指定服务端的端口号  
  2.   
  3. DatagramSocket socket = new DatagramSocket(1985);  
  4.   
  5. //创建一个Inet4Address对象  
  6. //需要使用Inet4Address.getByName把IP地址转换为网络地址  
  7.   
  8. //有些java版本可以使用InetAddress  
  9.   
  10. Inet4Address serverAddress = (Inet4Address) Inet4Address.getByName("192.168.1.32");  
  11. //设置要发送的字符串,  
  12.   
  13. String str = "hello psuaije";  
  14.   
  15. //把字符串str字符串转换为字节数组  
  16.   
  17. byte data[] = str.getBytes();  
  18.   
  19. //创建一个DatagramPacket对象,用于发送数据。  
  20. //参数一:要发送的数据  参数二:数据的长度  参数三:服务端的网络地址  参数四:网络地址  
  21.   
  22. DatagramPacket packet = new DatagramPacket(data, data.length ,serverAddress ,1985);  
  23.   
  24. //把数据发送到服务端。  
  25.   
  26. socket.send(packet); 1  


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

2 0
原创粉丝点击