Java面向对象程序设计(第二版)袁绍欣 第十五章课后习题答案
5.利用URLConnetction对象编写程序返回某网站的首页,并将首页的内容存放到文件当中。
import java.io.*;
import java.net.*;public class html {public static void main(String[] args) throws IOException {URL url= new URL("https://www.baidu.com/");URLConnection con = url.openConnection();BufferedReader is= new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));//三层括号由右往左,以指定字符集获得url的字节输入流,转换为字符输入流,按行读取,更高效FileOutputStream fos = new FileOutputStream("E:\\test.txt");//指定路径,它会自动新建一个文件String line;while((line = is.readLine()) != null ) {line = line + "\n";fos.write(line.getBytes("UTF-8"));//同样要指定字符集fos.flush();}System.out.println("Successful!");is.close();fos.close();}
}
注:读取到的内容大部分都是代码,影响阅读,我还不会去掉,因为字符集的缘故
仿照例15.4,编写完整的基于Socket的多客户/服务器通信程序
客户端:
import java.io.*;
import java.net.Socket;public class TalkClient {public static void main(String[] args) {Socket socket = null;try {socket = new Socket("127.0.0.1", 4700);//本机地址} catch (IOException e) {System.out.println("Can't not listen to " + e);}//System.out.println("111111");try {BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));//构建各种输入输出流对象BufferedWriter os = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));String readLine;while(!(readLine = sin.readLine()).equals("bye")) {os.write(readLine + "\n");os.flush();System.out.println("Server " + ": " + is.readLine());}os.close();is.close();socket.close();} catch (IOException e) {e.printStackTrace();}}
}服务器 + 线程:
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;class ServerThread extends Thread{Socket socket = null;int clienNum;public ServerThread(Socket socket, int num){this.socket = socket;clienNum = num + 1;}public void run(){try {String readLine;BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream())); BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));//构建各种输入输出流对象BufferedWriter os = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));System.out.println("connected with: " + socket);System.out.println("Client " + clienNum + ": " + is.readLine());readLine = sin.readLine();while(!readLine.equals("bye")){os.write(readLine + "\n"); os.flush();System.out.println("Client " + clienNum + ": " + is.readLine());//添加是哪个客户端发过来的消息readLine = sin.readLine();}os.close();is.close();socket.close();} catch (IOException e) {System.out.println("Error: " + e);}}
}
public class MultiTalkServer {private static int clientNum = 0;public static void main(String[] args) throws IOException {ServerSocket server = null;boolean listening = true;try {server = new ServerSocket(4700);//设置监听端口} catch (IOException e) {System.out.println("Could not listen on port: 4700");System.exit(-1);}while(listening){new ServerThread(server.accept(), clientNum).start();//启动新线程clientNum++;}server.close();}
}
仿照例15.5,编写完整的基于数据报的多客户/服务器通信程序
客户端(只能启动一个,这是数据报的规定,但启动多个不会报错):
import java.io.*;
import java.net.*;
public class QuoteClient {public static void main(String[] args) throws IOException{DatagramSocket socket=new DatagramSocket();//创建数据报套接字BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));String readLine;InetAddress address=InetAddress.getByName("127.0.0.1");//Server的IP信息while(!(readLine = sin.readLine()).equals("bye")) {byte[] buf = readLine.getBytes();//创建DatagramPacket对象DatagramPacket packet=new DatagramPacket(buf, buf.length, address, 4445);socket.send(packet); //发送buf = new byte[256];//创建新的DatagramPacket对象,用来接收数据报packet=new DatagramPacket(buf,buf.length);socket.receive(packet); //接收buf = packet.getData();//根据接收到的字节数组生成相应的字符串String received=new String(buf);//打印生成的字符串System.out.println("Quote of the Sever: "+received ); }socket.close(); //关闭套接口}
}服务器 + 线程:
import java.io.*;
import java.net.*;class QuoteServerThread extends Thread//服务器线程
{ protected DatagramSocket socket=null;//记录和本对象相关联的DatagramSocket对象protected BufferedReader in=null;//用来读文件的一个Readerprotected boolean moreQuotes=true;//标志变量,是否继续操作public QuoteServerThread() throws IOException {//无参数的构造函数this("QuoteServerThread");//以QuoteServerThread为默认值调用带参数的构造函数}public QuoteServerThread(String name) throws IOException {super(name); //调用父类的构造函数socket=new DatagramSocket(4445);//在端口4445创建数据报套接字 in= new BufferedReader(new InputStreamReader(System.in));} public void run() //线程主体{while(moreQuotes) {try{byte[] buf=new byte[256]; //创建缓冲区DatagramPacket packet=new DatagramPacket(buf,buf.length);//由缓冲区构造DatagramPacket对象socket.receive(packet); //接收数据报 //打印出客户端发送的内容System.out.println("Client : "+new String(packet.getData())); //从屏幕获取输入内容,作为发送给客户端的内容String dString= in.readLine(); //如果是bye,则向客户端发完消息后退出if(dString.equals("bye")){moreQuotes=false;}buf=dString.getBytes();//把String转换成字节数组,以便传送//从Client端传来的Packet中得到Client地址InetAddress address=packet.getAddress();int port=packet.getPort(); //端口号//根据客户端信息构建DatagramPacketpacket=new DatagramPacket(buf,buf.length,address,port);socket.send(packet); //发送数据报}catch(IOException e) { //异常处理e.printStackTrace(); //打印错误栈moreQuotes=false; //标志变量置false,以结束循环}}socket.close(); //关闭数据报套接字}
}public class QuoteServer{public static void main(String args[]) throws java.io.IOException{new QuoteServerThread().start();//启动一个QuoteServerThread线程}
}
感谢博主:qq_32090449 博主页: https://blog.csdn.net/qq_32090449?t=1
Java面向对象程序设计(第二版)袁绍欣 第十五章课后习题答案相关推荐
- JAVA面向对象程序设计(第二版) 袁绍欣 第四章答案
面向对象(上) 1.名词解释:构造方法.抽象 构造方法一般是用来初始化数据成员的,与类名相同,无返回值. 分为有参和无参数,当一个类中没有定义构造函数时,系统会给该类中加一个默认的空参数的构造函数,方 ...
- JAVA面向对象程序设计(第二版) 袁绍欣 第六章答案
1.this 和 super 各有几种用法? 普通的直接引用,this指向当前对象 形参与成员名字重名,用 this 来区分:子类和父类中的成员重名,使用 super 引用构造函数 2.子类对象实例化 ...
- 面向对象程序设计c++版董正言张聪课本课后习题答案第二章
ASCII 码值为 65 的字符型变量 char ch = 65;//值为 10000 的无符号整型变量 unsigned int i = 10000;//一个双精度浮点型变量 double f; 写 ...
- 面向对象程序设计c++版董正言张聪课本课后习题答案第六章
6.5雇员信息 #include<iostream> using namespace std; class employee {public:void setname(char* na); ...
- 面向对象程序设计c++版董正言张聪课本课后习题答案第四章
4.1找出一维数组中的最大值 #include <iostream> using namespace std; int main() {int a[10] = { 1,2,3,4,6,7, ...
- 面向对象程序设计c++版董正言张聪课本课后习题答案第五章
5.6两个数相加 int add(int a, int b) {return a + b; } 5.7两个数相加 #include<iostream> using namespace st ...
- 面向对象程序设计c++版董正言张聪课本课后习题答案第三章
3.1判断大小写字母 #include <iostream> using namespace std; int main() {char ch;cout << "en ...
- C语言程序设计第五版 谭浩强 第四章 课后习题 答案
谭浩强C语言程序设计第五版 第4章 课后习题 答案 点我看视频讲解+可运行源码 记得一键三连哦 第四章 选择结构程序设计 1. 什么是算术运算?什么是关系运算?什么是逻辑运算? [答案解析] 算熟运算 ...
- Python 程序设计(第二版)董付国_清华大学出版社_习题答案与分析【针对8.4及其之前的】
更多精彩内容:(没有设置公众号获得,麻烦动动小手~谢谢) CSDN下载:Python编程无师自通电子书,[美]科里·奥尔索夫(Cory Althoff)-文档类-CSDN下载 百度云:链接:https ...
最新文章
- ubuntu 安装 python3.6.8
- Android 侧划菜单
- 第四范式携手工银科技 首批入驻雄安人工智能算法开放平台
- nginx指定配置文件启动_【第1717期】Nginx入门指南
- ac2100 反弹shell无法粘贴_记一次突破反弹shell
- Swagger如何测试Date类型参数
- [转]Win XP常遇网络故障分析:局域网问题
- 【个人笔记】OpenCV4 C++ 图像处理与视频分析 01课
- day3-3.4字符编码与转码
- 制作一个PHP互动网页
- 斑马网络招聘汽车安全软件工程师
- xp计算机加域找不到网络路径,手把手为您win10系统计算机加域提示错误“找不到网络路径”的方法...
- mysql useing查询_mysql explain语法详解--优化你的查询
- 有趣实用的app分享,强烈推荐
- scanf_s 用法
- zzuli 2631: B(树链剖分)
- reflectance 和 albedo 的区别
- [深度学习从入门到女装]keras实战-Unet3d(BRAST2015)
- 计算机二级java有哪些题_计算机二级java试题及答案
- k8s和harbor的集成_Harbor与K8s的集成实践