第十二章编程作业
程序员文章站
2022-07-04 18:49:44
...
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();
}
}
推荐阅读
-
11月编程语言排行榜 Python逆袭C#上升到第4
-
[课后作业] 第001讲:我和Python的第一次亲密接触 | 课后测试题的答案
-
[课后作业] 第001讲:我和Python的第一次亲密接触 | 课后测试题
-
线程池(摘自C#高级编程第7版)
-
[推荐]ASP编程通用函数收藏大全第1/2页
-
Windows核心编程:第9章 用内核对象进行线程同步
-
1.java小作业-计算1到100的整合-指定输入多少行输出就打印多少行-打印24小时60分钟每一分钟-重载基础练习-面向java编程初学者
-
实例演练ASP+XML编程比较全的了第1/2页
-
Python 网络编程说明第1/2页
-
【飞桨团】Python编程巩固——第一天预习作业