小言_互联网的博客

【TCP/IP】简单几行Java代码实现迅雷功能,下载图片、音乐、视频、电影

627人阅读  评论(0)

一、TCP与UDP

TCP(Transmission Control Protocol,传输控制协议)协议:负责将要传输的文件分段 进行传输,一般用于建立会话 ,其基本特性是可靠传输 、流量控制,所谓三握手、四挥手也是基于TCP协议的

UDP(User Data Protocol,用户数据报协议)协议:一个数据包就能够完成数据通信 ,数据包不分段 ,不需要建立会话 ,不需要流量控制 ,属于不可靠传输 , 屏幕广播 、多播 、广播都是基于UDP协议

二、TCP实现数据上传

1、TCP服务端


  
  1. package com.tcpip;
  2. import java.io.File;
  3. import java.io.FileOutputStream;
  4. import java.io.InputStream;
  5. import java.net.ServerSocket;
  6. import java.net.Socket;
  7. public class TcpServerTest {
  8. public static void main(String[] args) throws Exception {
  9. //1、创建服务
  10. ServerSocket serverSocket = new ServerSocket( 9000);
  11. //2、监听客户端连接
  12. Socket socket = serverSocket.accept();
  13. //3、获取输入流
  14. InputStream is = socket.getInputStream();
  15. //4、文件输出
  16. FileOutputStream fos = new FileOutputStream( new File( "copy.png"));
  17. byte[] buffer = new byte[ 1024];
  18. int len;
  19. while ((len=is.read(buffer))!=- 1){
  20. fos.write(buffer, 0,len);
  21. }
  22. //5、关闭资源
  23. fos.close();
  24. is.close();
  25. socket.close();
  26. serverSocket.close();
  27. }
  28. }

2、TCP客户端


  
  1. package com.tcpip;
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.OutputStream;
  5. import java.net.InetAddress;
  6. import java.net.Socket;
  7. public class TcpClientTest {
  8. public static void main(String[] args) throws Exception {
  9. //1、创建一个socket连接
  10. Socket socket = new Socket(InetAddress.getByName( "127.0.0.1"), 9000);
  11. //2、创建一个输出流
  12. OutputStream os = socket.getOutputStream();
  13. //3、读取文件
  14. FileInputStream fis = new FileInputStream( new File( "01.png"));
  15. //4、写入文件
  16. byte[] buffer = new byte[ 1024];
  17. int len;
  18. while ((len=fis.read(buffer))!=- 1){
  19. os.write(buffer, 0,len);
  20. }
  21. //5.关闭资源
  22. fis.close();
  23. os.close();
  24. socket.close();
  25. }
  26. }

3、测试

三、UDP实现数据上传

1、UDP接收端


  
  1. package com.tcpip;
  2. import java.net.DatagramPacket;
  3. import java.net.DatagramSocket;
  4. public class UdpServerTest {
  5. public static void main(String[] args) throws Exception {
  6. //1、开放端口
  7. DatagramSocket socket = new DatagramSocket( 9090);
  8. //2、接收数据包
  9. byte[] buffer = new byte[ 1024];
  10. DatagramPacket packet = new DatagramPacket(buffer, 0,buffer.length);
  11. socket.receive(packet);
  12. System.out.println( new String(packet.getData(), 0,packet.getData().length));
  13. //3、关闭连接
  14. socket.close();
  15. }
  16. }

2、UDP发送端


  
  1. package com.tcpip;
  2. import java.net.DatagramPacket;
  3. import java.net.DatagramSocket;
  4. import java.net.InetAddress;
  5. public class UdpClientTest {
  6. public static void main(String[] args) throws Exception {
  7. //1、建立一个socket
  8. DatagramSocket socket = new DatagramSocket();
  9. //2、建个包
  10. String msg = "UDP 测试";
  11. InetAddress localhost = InetAddress.getByName( "localhost");
  12. int port = 9090;
  13. DatagramPacket packet = new DatagramPacket(msg.getBytes(), 0,msg.getBytes().length,localhost,port);
  14. //3、发送包
  15. socket.send(packet);
  16. //4、关闭资源
  17. socket.close();
  18. }
  19. }

3、测试

四、UDP实现多线程在线咨询

1、发送端


  
  1. package com.tcpip;
  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStreamReader;
  5. import java.net.DatagramPacket;
  6. import java.net.DatagramSocket;
  7. import java.net.InetSocketAddress;
  8. import java.net.SocketException;
  9. public class TalkSend implements Runnable {
  10. DatagramSocket socket = null;
  11. BufferedReader reader = null;
  12. private int fromPort;
  13. private String toIP;
  14. private int toPort;
  15. public TalkSend(int fromPort, String toIP, int toPort) {
  16. this.fromPort = fromPort;
  17. this.toIP = toIP;
  18. this.toPort = toPort;
  19. try {
  20. socket = new DatagramSocket(fromPort);
  21. reader = new BufferedReader( new InputStreamReader(System.in));
  22. } catch (SocketException e) {
  23. e.printStackTrace();
  24. }
  25. }
  26. @Override
  27. public void run() {
  28. while ( true){
  29. String data = null;
  30. try {
  31. data = reader.readLine();
  32. byte[] datas = data.getBytes();
  33. DatagramPacket packet = new DatagramPacket(datas, 0,datas.length, new InetSocketAddress( this.toIP, this.toPort));
  34. socket.send(packet);
  35. if(data.equals( "bye")){
  36. break;
  37. }
  38. } catch (IOException e) {
  39. e.printStackTrace();
  40. }
  41. }
  42. socket.close();
  43. }
  44. }

2、接收端


  
  1. package com.tcpip;
  2. import java.io.IOException;
  3. import java.net.DatagramPacket;
  4. import java.net.DatagramSocket;
  5. import java.net.SocketException;
  6. public class TalkReceive implements Runnable{
  7. DatagramSocket socket = null;
  8. private int port;
  9. private String msgFrom;
  10. public TalkReceive(int port, String msgFrom) {
  11. this.port = port;
  12. this.msgFrom = msgFrom;
  13. try {
  14. socket = new DatagramSocket(port);
  15. } catch (SocketException e) {
  16. e.printStackTrace();
  17. }
  18. }
  19. @Override
  20. public void run() {
  21. while ( true){
  22. try {
  23. //准备接收包裹
  24. byte[] container = new byte[ 1024];
  25. DatagramPacket packet = new DatagramPacket(container, 0,container.length);
  26. //阻塞式接收包裹
  27. socket.receive(packet);
  28. //断开连接bye
  29. byte[] data = packet.getData();
  30. String receiveData = new String(data, 0,data.length);
  31. System.out.println(msgFrom + ":" + receiveData);
  32. if(receiveData.equals( "bye")){
  33. break;
  34. }
  35. } catch (IOException e) {
  36. e.printStackTrace();
  37. }
  38. }
  39. socket.close();
  40. }
  41. }

3、学生


  
  1. package com.tcpip;
  2. public class TalkStudent {
  3. public static void main(String[] args) {
  4. new Thread( new TalkSend( 7777, "localhost", 9999)).start();
  5. new Thread( new TalkReceive( 8888, "老师")).start();
  6. }
  7. }

4、老师


  
  1. package com.tcpip;
  2. public class TalkTeacher {
  3. public static void main(String[] args) {
  4. new Thread( new TalkSend( 5555, "localhost", 8888)).start();
  5. new Thread( new TalkReceive( 9999, "学生")).start();
  6. }
  7. }

5、开始聊天啦,模拟请假

五、Java下载URL网络资源(图片、音乐、视频、电影)

一、前言

今天学习了一下FTP/IP的相关知识,发现一个强大的功能,用Java下载URL网络资源,据说收费的也能下! 学编程真好,Java真好。

二、代码实例


  
  1. package com.tcpip;
  2. import java.io.FileOutputStream;
  3. import java.io.InputStream;
  4. import java.net.HttpURLConnection;
  5. import java.net.URL;
  6. public class UrlDown {
  7. public static void main(String[] args) throws Exception {
  8. URL url = new URL( "https://vodkgeyttp8.vod.126.net/cloudmusic/776e/core/e166/8847b8c0360e7e3314cf773848e943cd.mp4?wsSecret=ebc2bc0c17347de34a5b1246c3be0b34&wsTime=1598776625");
  9. HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
  10. InputStream is = urlConnection.getInputStream();
  11. FileOutputStream fos = new FileOutputStream( "FOR LOVE.mp4");
  12. byte[] buffer = new byte[ 1024];
  13. int len;
  14. while ((len=is.read(buffer))!=- 1){
  15. fos.write(buffer, 0,len);
  16. }
  17. fos.close();
  18. is.close();
  19. urlConnection.disconnect();
  20. }
  21. }

三、执行效果

1、搜索网络资源URL

2、代码下载效果

3、视频播放 

 

上一篇:TCP/IP 基础知识总结(绝对经典)

下一篇:【TCP/IP】使用C#实现websocket服务端与客户端通信

 

 


转载:https://blog.csdn.net/guorui_java/article/details/108305113
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场