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

实验目的:

  1. 掌握IP地址和端口号的作用;
  2. 掌握InetAddress对象的使用;
  3. 掌握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() ;
}}}
  • 7
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值