第十二章编程作业

1). 编程实现:将网络上一张图片或一个mp3或一个视频的信息保存到本地。


代码:

package cn.whb.test12;

import java.io.BufferedInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;

public class Work01 {
    
    

	public static void main(String[] args) throws Exception {
    
    
		
		URL url = new URL("https://96.f.1ting.com/local_to_cube_202004121813/96kmp3/jn/13.mg/5.mgh/4.mp3");
		
		InputStream is = url.openStream();
		BufferedInputStream bis = new BufferedInputStream(is);
		OutputStream os = new FileOutputStream("./1.mp3");
		
		byte[] datas = new byte[1024*10];
		
		int len = -1;
		
		while((len=bis.read(datas))!=-1) {
    
    
			os.write(datas,0,len);
		}
		
		bis.close();
		os.close();
	}

}

2). 使用基于TCP的Java Socket编程,完成如下功能:

1) 要求从客户端录入几个字符,发送到服务器端。
2) 由服务器端将接收到的字符进行输出。
3) 服务器端向客户端发出“您的信息已收到”作为响应。
4) 客户端接收服务器端的响应信息。


代码:

  • client端
package cn.whb.test12;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;

public class Client {
    
    

	public static void main(String[] args) throws IOException {
    
    
		
		System.out.println("---------client----------");
		
		BufferedReader line = new BufferedReader(new InputStreamReader(System.in));
		
		String datas = line.readLine();
		
		// 创建套接字
		Socket client = new Socket("localhost",8888);
		
		// 建立连接(发送消息)
		DataOutputStream dos = new DataOutputStream(client.getOutputStream());
		dos.writeUTF(datas);
		
		// 接收消息
		BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream()));
		
		System.out.println(br.readLine());
		
		// 释放资源
		line.close();
		dos.close();
		br.close();
		client.close();
	}
}
  • server端
package cn.whb.test12;

import java.io.DataInputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    
    

	public static void main(String[] args) throws Exception {
    
    
		
		System.out.println("---------server----------");
		
		// 创建服务器套接字
		ServerSocket server = new ServerSocket(8888);
		// 建立连接
		Socket socket = server.accept();
		System.out.println("-----一个客户端已连接-----");
		
		// 接收消息并输出
		DataInputStream dis = new DataInputStream(socket.getInputStream());
		System.out.println(dis.readUTF());
		
		// 发送回馈信息
		PrintWriter out =new PrintWriter(socket.getOutputStream(),true);
		out.println("您的信息已收到");
		
		out.close();
		dis.close();
		socket.close();
		server.close();
	}
}

3). 使用基于UDP的Java Socket编程,完成在线咨询功能:

1) 客户向咨询人员咨询。
2) 咨询人员给出回答。
3) 客户和咨询人员可以一直沟通,直到客户发送bye给咨询人员。


代码:

  • client端
package cn.whb.test12;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;

public class UDPClient {
    
    

	public static void main(String[] args) throws Exception {
    
    
		
		System.out.println("----clent-----");
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		// 创建套接字(接收端口)
		DatagramSocket client = new DatagramSocket(8888);		
		
		// 创建发送消息的包裹和容器
		DatagramPacket sendPacket;
		byte[] sendCon;
		
		// 用来将接收的消息转换成字符串
		String info;
		
		while (true) {
    
    
			// 准备数据
			// 读取控制台输入
			System.out.print("请输入:");
			String data = br.readLine();
			sendCon = data.getBytes();
			
			// 封装 指定发送端ip与端口
			sendPacket = new DatagramPacket(sendCon, sendCon.length, new InetSocketAddress("localhost", 9999));
			
			// 发送包裹
			client.send(sendPacket);
			
			if(data.equals("bye")) {
    
    
				break;
			}
			
			// 接收消息
			// 创建接收消息的容器和包裹
			byte[] receCon = new byte[1024*60];
			DatagramPacket recePacket = new DatagramPacket(receCon, receCon.length);

			client.receive(recePacket);
			
			// 获取实际接受到消息的长度
			int len = recePacket.getLength();
			
			info = new String(receCon,0,len);
			
			// 输出
			System.out.println("客服说:" + info);
			
		}
		// 释放资源
		br.close();
		client.close();
	}

}
  • server端
package cn.whb.test12;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;


public class UDPServer {
    
    

	public static void main(String[] args) throws IOException {
    
    
		
		System.out.println("------server------");
		
		// 读取控制台输入 
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		// 准备发送消息的容器和包裹
		byte[] senCon;
		DatagramPacket sendPacket;
		
		// 创建套接字(接收端口)
		DatagramSocket server = new DatagramSocket(9999);
		
		// 用来将接收的消息转换成字符串
		String info;
		
		while(true) {
    
    
			// 接收
			// 准备接收消息的容器和包裹 封装
			byte[] receCon = new byte[1024*60];
			DatagramPacket recePacket = new DatagramPacket(receCon, 0, receCon.length);;
			
			server.receive(recePacket);
			
			// 获取实际接受到消息的长度
			int len = recePacket.getLength();
			
			info = new String(receCon,0,len);
			System.out.println("客户说:" + info);
			
			if(info.equals("bye")) {
    
    
				break;
			}
			
			// 读取控制台输入
			System.out.print("请输入:");
			
			String datas = br.readLine();
			
			senCon = datas.getBytes();
			
			// 封装,指定目的地
			sendPacket = new DatagramPacket(senCon, senCon.length, new InetSocketAddress("localhost",8888));
			
			// 发送消息
			server.send(sendPacket);
		}
		
		// 释放资源
		br.close();
		server.close();
	}
}

猜你喜欢

转载自blog.csdn.net/qq_46456049/article/details/109817616