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面向对象程序设计(第二版)袁绍欣 第十五章课后习题答案相关推荐

  1. JAVA面向对象程序设计(第二版) 袁绍欣 第四章答案

    面向对象(上) 1.名词解释:构造方法.抽象 构造方法一般是用来初始化数据成员的,与类名相同,无返回值. 分为有参和无参数,当一个类中没有定义构造函数时,系统会给该类中加一个默认的空参数的构造函数,方 ...

  2. JAVA面向对象程序设计(第二版) 袁绍欣 第六章答案

    1.this 和 super 各有几种用法? 普通的直接引用,this指向当前对象 形参与成员名字重名,用 this 来区分:子类和父类中的成员重名,使用 super 引用构造函数 2.子类对象实例化 ...

  3. 面向对象程序设计c++版董正言张聪课本课后习题答案第二章

    ASCII 码值为 65 的字符型变量 char ch = 65;//值为 10000 的无符号整型变量 unsigned int i = 10000;//一个双精度浮点型变量 double f; 写 ...

  4. 面向对象程序设计c++版董正言张聪课本课后习题答案第六章

    6.5雇员信息 #include<iostream> using namespace std; class employee {public:void setname(char* na); ...

  5. 面向对象程序设计c++版董正言张聪课本课后习题答案第四章

    4.1找出一维数组中的最大值 #include <iostream> using namespace std; int main() {int a[10] = { 1,2,3,4,6,7, ...

  6. 面向对象程序设计c++版董正言张聪课本课后习题答案第五章

    5.6两个数相加 int add(int a, int b) {return a + b; } 5.7两个数相加 #include<iostream> using namespace st ...

  7. 面向对象程序设计c++版董正言张聪课本课后习题答案第三章

    3.1判断大小写字母 #include <iostream> using namespace std; int main() {char ch;cout << "en ...

  8. C语言程序设计第五版 谭浩强 第四章 课后习题 答案

    谭浩强C语言程序设计第五版 第4章 课后习题 答案 点我看视频讲解+可运行源码 记得一键三连哦 第四章 选择结构程序设计 1. 什么是算术运算?什么是关系运算?什么是逻辑运算? [答案解析] 算熟运算 ...

  9. Python 程序设计(第二版)董付国_清华大学出版社_习题答案与分析【针对8.4及其之前的】

    更多精彩内容:(没有设置公众号获得,麻烦动动小手~谢谢) CSDN下载:Python编程无师自通电子书,[美]科里·奥尔索夫(Cory Althoff)-文档类-CSDN下载 百度云:链接:https ...

最新文章

  1. ubuntu 安装 python3.6.8
  2. Android 侧划菜单
  3. 第四范式携手工银科技 首批入驻雄安人工智能算法开放平台
  4. nginx指定配置文件启动_【第1717期】Nginx入门指南
  5. ac2100 反弹shell无法粘贴_记一次突破反弹shell
  6. Swagger如何测试Date类型参数
  7. [转]Win XP常遇网络故障分析:局域网问题
  8. 【个人笔记】OpenCV4 C++ 图像处理与视频分析 01课
  9. day3-3.4字符编码与转码
  10. 制作一个PHP互动网页
  11. 斑马网络招聘汽车安全软件工程师
  12. xp计算机加域找不到网络路径,手把手为您win10系统计算机加域提示错误“找不到网络路径”的方法...
  13. mysql useing查询_mysql explain语法详解--优化你的查询
  14. 有趣实用的app分享,强烈推荐
  15. scanf_s 用法
  16. zzuli 2631: B(树链剖分)
  17. reflectance 和 albedo 的区别
  18. [深度学习从入门到女装]keras实战-Unet3d(BRAST2015)
  19. 计算机二级java有哪些题_计算机二级java试题及答案
  20. k8s和harbor的集成_Harbor与K8s的集成实践

热门文章

  1. unity 添加人物控制器行走动画
  2. python计算矩形周长_一边学编程,一边学语数外,用python编程学三年级周长计算...
  3. 牛客竞赛-新手上路-语法入门-选择结构.c
  4. HTTP协议之防盗链与反防盗链
  5. 格雷希尔GripSeal液压快速接头的构造和原理
  6. OCR文字识别:Tesseract-4.00训练字库
  7. MEMS技术在智慧农业中的应用
  8. 添加JAVA环境变量
  9. 基于 TiDB 开源社区的友邻合作伙伴体系构建
  10. opencv 星空_opencv随笔1