聊天程序设计实验报告——java

    技术2022-07-10  137

    实验目的:

    掌握IP地址和端口号的作用;掌握InetAddress对象的使用;掌握UDP和TCP通信方式。

    实验内容:

    模拟QQ和微信等社交软件,聊天程序要求通过监听指定的端口号、目标IP地址和目标端口号,实现消息的发送和接收功能,并把聊天内容显示出来。

    实验步骤与调试过程:

    (1)通过任务描述和运行结果图可以看出,此任务是使用多线程和UDP通信的相关知识实现的。要实现图中的聊天实口界面,首先就要定义一个实现聊天室功能的类,类中需要定义访问聊天室程序时的输出语句,以及获取输入的发送端口号、接收端口号和实现发送和接收功能的方法。 (2)实现发送数据功能。 该功能需要通过一个实现了Runnable 接口的类来实现, 类中需要定义获取发送数据的端口号,并在实现的run()方法中,编写发送数据的方法。 (3)实现接收数据功能。该功能也需要通过一一个实现了Runnable接口的类来实现,类中需要定义获取接收数据的端口号,并在实现的run()方法中,编写显示接收到的数据的方法。 (4)创建完所有的类和方法后,就可以通过运行两次程序,并同时开启两个窗口来实现聊天功能。

    实验代码:

    package CharRoom; 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 receivePort=sc.nextInt(); System.out.println("聊天系统启动~"); new Thread(new SendTask(sendPort),"发送端任务").start();//发送操作 new Thread(new ReceiveTask(receivePort),"接收端任务").start();//接收操作 }} package CharRoom; import java.net. DatagramPacket; import java. net. DatagramSocket; import java.net. InetAddress; import java.util . Scanner; //发送数据的任务类 public class SendTask implements Runnable{private int sendPort; //发数据的端口号 //构造方法 public SendTask (int sendPort) { this. sendPort = sendPort; }@Override public void run(){ try {//1.创建DatagramSocket对象 DatagramSocket ds=new DatagramSocket(); 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() ; } } } package CharRoom; import java.net.DatagramPacket; import java.net.DatagramSocket; /* * 接收 */public class ReceiveTask implements Runnable{ private int receivePort; // 接收数据的端口号 public ReceiveTask(int receivePort) { this. receivePort =receivePort; } @Override public void run() { try { // 1.DatagramSocket 对象 DatagramSocket ds = new DatagramSocket (receivePort); 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() ; }}}
    Processed: 0.024, SQL: 9