1.仿照例15.4,编写基于TCP Socket的多客户/服务器通信程序。

package p1;import java.io.*;
import java.net.*;
public class TalkClient {public static void main(String args[]) {try{//向本机的4700端口发出客户请求Socket socket=new Socket("127.0.0.1",4700);//由系统标准输入设备构造BufferedReader对象BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));//由Socket对象得到输出流,并构造PrintWriter对象PrintWriter os=new PrintWriter(socket.getOutputStream());//由Socket对象得到输入流,并构造相应的BufferedReader对象BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));String readline;readline=sin.readLine(); //从系统标准输入读入一字符串while(!readline.equals("bye")){//若从标准输入读入的字符串为 "bye"则停止循环//将从系统标准输入读入的字符串输出到Serveros.println(readline);os.flush();//刷新输出流,使Server马上收到该字符串//在系统标准输出上打印读入的字符串System.out.println("Client:"+readline);//从Server读入一字符串,并打印到标准输出上System.out.println("Server:"+is.readLine());               readline=sin.readLine(); //从系统标准输入读入一字符串} //继续循环os.close(); //关闭Socket输出流is.close(); //关闭Socket输入流socket.close(); //关闭Socket}catch(Exception e) {System.out.println("Error"+e); //出错,则打印出错信息}}
}package p1;import java.io.*;
import java.net.*;class ServerThread extends Thread{Socket socket=null; //保存与本线程相关的Socket对象int clientnum; //保存本进程的客户计数public ServerThread(Socket socket,int num) { //构造函数this.socket=socket; //初始化socket变量clientnum=num+1; //初始化clientnum变量}public void run() { //线程主体try{String line;//由Socket对象得到输入流,并构造相应的BufferedReader对象BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));//由Socket对象得到输出流,并构造PrintWriter对象PrintWriter os=new PrintWriter(socket.getOutputStream());//由系统标准输入设备构造BufferedReader对象BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));//在标准输出上打印从客户端读入的字符串System.out.println("Client:"+ clientnum +is.readLine());//从标准输入读入一字符串line=sin.readLine();while(!line.equals("bye")){//如果该字符串为 "bye",则停止循环os.println(line);//向客户端输出该字符串os.flush();//刷新输出流,使Client马上收到该字符串//在系统标准输出上打印该字符串System.out.println("Server:"+line);//从Client读入一字符串,并打印到标准输出上System.out.println("Client:"+ clientnum +is.readLine());line=sin.readLine();//从系统标准输入读入一字符串}//继续循环os.close(); //关闭Socket输出流is.close(); //关闭Socket输入流socket.close(); //关闭Socket          }catch(Exception e){System.out.println("Error:"+e);//出错,打印出错信息}}
}
public class MultiTalkServer{static int clientnum=0; //静态成员变量,记录当前客户的个数public static void main(String args[]) throws IOException {ServerSocket serverSocket=null;boolean listening=true;try{//创建一个ServerSocket在端口4700监听客户请求serverSocket=new ServerSocket(4700);          }catch(IOException e) {System.out.println("Could not listen on port:4700.");//出错,打印出错信息System.exit(-1); //退出}while(listening){ //循环监听//监听到客户请求,根据得到的Socket对象和客户计数创建服务线程,并启动之new ServerThread(serverSocket.accept(),clientnum).start();clientnum++; //增加客户计数}serverSocket.close(); //关闭ServerSocket}
}

2.仿照例15.5,编写基于UDP数据报的多客户/服务器通信程序。

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线程}
}package ob1;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线程}
}

3.基于TCP Socket的C/S通信与基于UDP数据报的C/S通信有哪些区别?Java分别提供了哪些支持?
TCP:
特点:传输量大,可靠性强
传输数据可靠性:TCP是一个可靠的协议,能确保接收方完全正确地获取发送方发出的消息
通讯方式:传输数据前需要建立连接,发送方与接收方在连接之上传输数据
传输数据量:数据量大,可靠性强
JAVA支持:Socket,ServerSocket
UDP:
特点:UDP操作简单,传输效率高
传输数据可靠性:UDP是一个不可靠的协议,发送方发送的数据报不保证按相同次序到达也不能保证接收方收到
通讯方式:传输数据有大小限制(数据报最大64Kb)
传输数据量:操作简单,传输效率高
JAVA支持:DatagramSocket,DatagramPacket

Java第十一次课程作业相关推荐

  1. Java第八次课程作业

    1.FutureTask类有什么作用?它实现了哪些接口?Callable接口和Runnable接口有什么不同? FutureTask类的作用是用于线程需要返回执行结果时. 它实现了Future接口和R ...

  2. python编程书籍1020python编程书籍_代写INFT 1020作业、Database作业代做、Java课程作业代写、c++,Python编程作业代做...

    代写INFT 1020作业.Database作业代做.Java课程作业代写.c++,Python编程作业代做 日期:2020-04-25 10:27 INFT 1020 Database Fundam ...

  3. java 正确的表达式_JAVA程序设计课程作业,二、多选题1.指出正确的表达式A.double a=1.0B.Double a=new Dou...

    JAVA程序设计课程作业,二.多选题1.指出正确的表达式A.double a=1.0B.Double a=new Dou JAVA程序设计课程作业, 二.多选题 1.指出正确的表达式 A.double ...

  4. 大二java课程作业——教学数据管理系统

    教学数据管理系统 大二刚学java做的课程作业 题目 教师教学过程中会取得各种数据,这些数据有可能是不同类型的文件或格式.教学活动数据文件为Excel文件或txt格式数据文件,内容如:学生学号.姓名. ...

  5. Java水果商店课程设计展望,JavaWeb课程作业之网上水果商店.zip

    [实例简介] JavaWeb课程作业之网上水果商店(基本版),含sql文件,使用Eclipse+MySql制作,前端使用jquery,Ajax,JS DOM动态修改网页,后端采用jspModel,连接 ...

  6. java计算机毕业设计计算机课程在线培训学习管理系统MyBatis+系统+LW文档+源码+调试部署

    java计算机毕业设计计算机课程在线培训学习管理系统MyBatis+系统+LW文档+源码+调试部署 java计算机毕业设计计算机课程在线培训学习管理系统MyBatis+系统+LW文档+源码+调试部署 ...

  7. 《Java语言程序设计》 课程分析与总结(上)---我为什么这样设计考试试卷?

    <Java语言程序设计>课程分析与总结(上) 我为什么这样设计考试试卷? 自2003年以来,我承担了北京理工大学计算机学院<Java语言程序设计>这门课的教学任务,从2000级 ...

  8. 我是如何通过拉勾教育学习《java高薪训练营》课程突破困境的

    一.个人现状 非名牌大学 非985或211学历的我,拿着一个普通大学的本科学历在找工作时真是无奈,稍好一些的公司,都对学校有要求.对学历没啥门槛的公司去了也是做做增删改查,公司也没有什么大牛,干很久也 ...

  9. 基于jeeSite的软件测试课程作业 流程记录

    文章目录 基于jeeSite的软件测试课程作业 jeeSite软件启动步骤 普通做法 进入root,命令行输入`mvn install` 配置数据库 访问网页 IDEA做法 selenium简单脚本编 ...

最新文章

  1. python程序员在公司都是做什么的-在一家公司呆了 10 年的程序员,最后都怎么了?...
  2. NYOJ 645 骰子
  3. NodeMailer
  4. Java中的HashMap和Hashtable有什么区别?
  5. 台式计算机视频设备打不开,电脑视频设备被占用未能创建视频预览怎么办
  6. [Linux] Linux命令之pstree - 以树状图显示进程间的关系
  7. 剑指offer面试题29. 顺时针打印矩阵(边界问题)
  8. PostgreSQL数据库的安装与配置
  9. php学习的一些笔记
  10. MSDN2008下载
  11. VTK学习笔记(十)基于VTK和ITK程序
  12. 七腾OA办公平台解决方案
  13. ApplicatioinRunner vs CommandLineRunner
  14. 解决GTX1050Ti显卡下安装Deepin15.7完成后重启卡logo问题
  15. 手摸手教你使用srs服务搭建毫秒级延时直播
  16. Liunx学习笔记 - 07 - 02 正则表达式与文件格式化处理
  17. Pywifi——检测是否网络连接
  18. CentOS 7 源码安装 apache 及配置
  19. 面试题总结-搜狐手机网Python开发工程师
  20. Kaggle实战:随机森林预测泰坦尼克生存率

热门文章

  1. 计算机科学的分支人机交互,美国计算机专业——人机交互方向
  2. 吐槽程序员的变量名和函数名(给变量和函数取名字时遇到的坑)
  3. 关于治疗便秘的方法 - 生活至上,美容至尚!
  4. SpringBoot中文件下载、拦截器、war包部署、jar包部署
  5. saf disaulgh flkas.M f;lxm lkdf,vlk,.
  6. 《盛世财神》主题动漫
  7. 一款开源java版的视频管理系统!
  8. 集成测试详解,看完必须懂了
  9. .net mysql transactionscope_使用Transaction访问数据库(C#,TransactionScope,.NET 2.0)
  10. PM3破解辅助计算器