实验目的:
1、掌握“聊天程序”的实现思路。
2、掌握网络通信中UDP协议的编程原理。
3、理解并掌握UDP通信中DatagramPacket和DatagramSocket类的使用。
实验要求:
在当今,网聊已成为人们生活的重要组成部分,人们每天都会使用QQ或者微信等社交软件来与他人进行沟通。在学习完UDP通信的相关知识后,读者已经可以将多线程和UDP的相关知识结合起来,实现一个功能完善的聊天程序。
本任务的聊天程序要求通过监听指定的端口号、目标IP地址和目标端口号,实现消息的发送和接收功能,并把聊天内容显示出来。
二、实验原理(图):
1、通过任务描述可以看出,此任务是使用多线程和UDP通信的相关知识实现的。要实现聊天窗口界面,首先就需要一个实现聊天室功能的类,类中需要定义访问聊天室程序时的输出语句,以及获取输入的发送端口号、接收端口号和实现发送和接收功能的方法。
2、实现发送数据功能。该功能需要通过一个实现了Runnable接口的类来实现,类中需要定义获取发送数据的端口号,并在实现的run()方法中,编写发送数据的方法。
3、实现接收数据功能。该功能也需要一个实现了Runnable接口的类来实现,类中需要定义获取接收数据的端口号,并在实现的run()方法中,编写显示接收到的数据的方法。
4、创建完所有的类和方法后,就可以通过运行两次程序,并同时开启两个窗口来实现聊天功能。
三、实验设备(环境):
确保已经正确安装JDK,Eclipse等集成IDE,在 Eclipse环境中完成聊天程序设计程序的编写和调试。


import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.nio.channels.DatagramChannel;
import java.util.Scanner;
public class SendTask implements Runnable {private int sendPort;//发数据的端口号
//构造方法
public SendTask(int sendPort) {this.sendPort=sendPort;}
public void run() {try {//1.创建DatagramSocket对象DatagramSocket ds=new DatagramSocket();//2.输入要发送的数据Scanner sc=new Scanner(System.in);//获取键盘输入的数据while(true) {String data=sc.nextLine();//3.封装数据到DatagramPacket对象中byte[] buf=data.getBytes();DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("127.0.0.255"),sendPort);//4.发送数据ds.send(dp);    }}catch(Exception e) {e.printStackTrace();}}}import java.net.DatagramPacket;
import java.net.DatagramSocket;public class ReceiveTask implements Runnable{private int receivePort;//接收数据的端口号
public ReceiveTask(int receivePort) {this.receivePort=receivePort;
}
public void run()
{try{//1.DatagramSocket对象DatagramSocket ds=new DatagramSocket(receivePort);        //2.创建DatagramSocket对象byte[] buf=new byte[1024];DatagramPacket dp=new DatagramPacket(buf,buf.length);//3.接收数据while(true) {ds.receive(dp);//4.显示接收的数据String str=new String(dp.getData(),0,dp.getLength());System.out.println("收到"+dp.getAddress().getHostAddress()+"--发送的数据--"+str);}}catch(Exception e) {e.printStackTrace(); }}}import java.util.Scanner;
/*聊天室* */
public class CharRoom {public static void main(String []args) {System.out.println("欢迎您进入聊天室!");//模拟聊天室Scanner sc=new Scanner(System.in);System.out.println("请输入本程序发送端端口号:");int sendPort=sc.nextInt();System.out.println("请输入本程序接收端端口号:");int receviePort=sc.nextInt();System.out.println("聊天系统启动!!");new Thread(new SendTask(sendPort),"发送端任务").start();//发送操作new Thread(new ReceiveTask(receviePort),"接收端任务").start();//接收操作
}}


接收数据的一端实例对象时需要传入port,指定监听该端口;发送数据的一端实例对象默认无参。只要确定接收和发送端口,就能连接两个端口进行聊天。通过监听指定的端口号、目标IP地址和目标端口号,实现消息的发送和接收功能,并把聊天内容显示出来。

Java聊天程序设计相关推荐

  1. 仿qq聊天程序设计之借鉴

    import java.net.DatagramPacket; import java.io.Serializable; import java.net.InetAddress; public cla ...

  2. java银行存款程序设计

    目的: 1.学会分析"银行存款程序"的实现思路. 2.根据思路独立完成"银行存款程序"的源代码编写.编译及运行. 3.通过存款程序理解多线程安全问题的发生原因, ...

  3. 清华大学《Java语言程序设计进阶》公开课总结

    点击查看:原文 本文是清华大学许斌老师的公开课:Java语言程序设计进阶 的课堂笔记,快速复习一下,时间有限,因此大量直接截图.许斌老师声明:没有配套讲义,建议参考书籍:周志明<深入理解java ...

  4. 四川大学java试题_四川大学2013年计算机(软件)学院Java语言程序设计期末考试试题B卷...

    四川大学期末考试试题(闭卷) (2013 -2014学年第1学期) 课程号:课程名称: Java语言程序设计(B 卷)任课教师: 适用专业年级:学号:姓名: 一.单项选择题(本大题共20小题,每小题2 ...

  5. java语言程序设计期末复习综合练习题_Java语言程序设计期末复习综合练习题答案...

    Java语言程序设计期末复习综合练习题 一.选择题. 2. main方法是Java Application程序执行的入口点,关于main方法的方法头以下哪项是合法的( )? A.public stat ...

  6. 2018年10月自考java_请注意!2018年自考《Java语言程序设计(一)》课程全国统一命题考试...

    为组织好高等教育自学考试<Java语言程序设计(一)>课程的全国统一考试命题工作,根据全国统一命题课程的有关规定,特制定本说明. 一.考试原则 1.考试标准 本课程考试参照全日制普通高校同 ...

  7. 20155328 《Java程序设计》 实验二(Java面向对象程序设计) 实验报告

    20155328 <Java程序设计> 实验二(Java面向对象程序设计) 实验报告 单元测试 一.单元测试和TDD 编程时需理清思路,将编程需求等想好,再开始编.此部分可用伪代码实现. ...

  8. java语言程序设计考点_计算机二级考试Java语言程序设计考点:关键字

    大家回忆一下我们在学习汉语的时候,开始学的是什么?肯定是先学一些单个的字,只有认识了单个的字,然后才能组成词,然后才能慢慢的到句子,然后到文章.学习同计算机交流跟这个过程是一样的,首先我们得学习一些计 ...

  9. 2012年1月java_全国2012年1月自考Java语言程序设计(一)试题及答案.doc

    全国2012年1月自考Java语言程序设计(一)试题及答案 全国2012年10月自考Java语言程序设计(一)试题 课程代码:04747 选择题部分 一.单项选择题 本大题共10小题,每小题1分,共1 ...

最新文章

  1. linux 防火墙 -netfilter
  2. c mysql 免安装版_MySQL5.6免安装版环境配置图文教程
  3. sentinel 时间窗口的实现
  4. linux网卡绑定和漂移,LINUX修改、增加IP的方法,一张网卡绑定多个IP/漂移IP【转】...
  5. Go 在 TiDB 的实践
  6. (PHP 4, PHP 5) isset — 检测变量是否设置
  7. 串口和TCP测试工具
  8. 【读书笔记】大话数据结构
  9. ER Studio 直接导出sql建表
  10. 6款主流PDF编辑器测试,快来看看哪一款最适合你吧
  11. linux不同版本编译,嵌入式ARM+Linux 多个不同版本的交叉编译器的切换方法
  12. python改变像素点颜色_更改像素颜色Python
  13. QQ等级计算方法及图标
  14. 蓝牙连接不上车要hfp_hfp是什么意思车上
  15. 英语作文框架(四级)
  16. 【问题解决】正则表达式在线自动生成器
  17. LoRaEdge LR1120 卫星直连通信解读
  18. 计算机诞生以来应用最早的,全国一级b考试练习题.doc
  19. Linux系统管理员之日志管理
  20. Django 后台admin管理页面添加简易导出/下载数据功能的两种方法

热门文章

  1. 普通大学生的真实出路
  2. 实验二+108+曾宏宇
  3. LabVIEW为NI-DAQmx设备创建任务
  4. B2C电商暗战,快手、美团入局
  5. Oracle 9i amp; 10g编程艺术-深入数据库体系结构——第12章:数据类型
  6. Java中channel的应用总结
  7. 使用python导入Excel作图
  8. 模拟MMU设计一个将IPv4地址索引化的路由表,不同于DxR
  9. 网页抓取/数据抽取/信息提取软件工具包MetaSeeker
  10. mysql 循环控制语句介绍