JAVA中聊天室程序
要求:
编写一个聊天程序
有收数据的部分,也同时有发数据的部分。
这两部分需要同时执行,那就需要用到多线程技术。
一个线程控制发,一个线程控制收。
注意
这里我们需要注意的是,因为收发动作是不一致的,所以要定义两个run方法,而且这两个方法要封装到不同的类中。并且,我们在写出我们的地址时,如果是一对一我们可以写出目的的IP地址即可,也可以写成255形式,如目标地址是10.34.0.114,这时双方两人进行聊天,也可以是10.34.0.255,广播的方式让在这个频段的主机都可以收到讯息。
代码
import java.io.*;
import java.net.*;
/*
因为收和发动作是不一致的,所以要定义两个run方法。
而且这两个方法要封装到不同的类中。
*/
class Send implements Runnable{
private DatagramSocket ds;//私有化成员
public Send(DatagramSocket ds){
this.ds=ds;
}
public void run(){//重写run方法
try{//发送端,读键盘,封装在一个单独线程当中
BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));//转化流
String line=null;
while((line=bufr.readLine())!=null){
if("886".equals(line))
break;
byte[] buf=line.getBytes();//建立缓冲区
DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("10.32.0.255"),10006);//发送到哪去,获取主机的信息
ds.send(dp);//将包投递出去
}
}
catch(Exception e){
throw new RuntimeException("发送失败");
}
}
}
class Rece implements Runnable{
private DatagramSocket ds;
public Rece(DatagramSocket ds){
this.ds=ds;
}
public void run(){
try{
while(true){//循环接受
byte[] buf=new byte[1024];//创建缓存区
DatagramPacket dp=new DatagramPacket(buf,buf.length);//数据包接受数据
ds.receive(dp);//将接受的数据存储到定义好的数据包中
String ip=dp.getAddress().getHostAddress();//获取发送端主机地址和主机信息
String data=new String(dp.getData(),0,dp.getLength());
System.out.println(ip+":"+data);//
}
}
catch(Exception e){
throw new RuntimeException("接收端失败");
}
}
}
/*
主函数
*/
class liaotian1{
public static void main(String args[])throws Exception{
DatagramSocket sendSocket=new DatagramSocket();//发送端服务
DatagramSocket receSocket=new DatagramSocket(10006);//接收端服务
new Thread(new Send(sendSocket)).start();//创建thread类 开启多线程
new Thread(new Rece(receSocket)).start();//
}
}
结果
很尴尬,我没有结果。由于本人的笔记本电脑的限制,在经历了一次重装后,本人没有安装VM虚拟机,所以现在不能演示。
本次代码的条件是需要两台或者两台以上在一个局域网中的电脑才可以进行聊天室的功能
具体的操作是,在DOS命令行上进行JAVAC 后JAVA liaotian1即可,等候其他人的加入进行聊天。
注意,在这里不再一个局域网中,即使是找到了目标的IP地址,链接了internet也是无法进行聊天,本人亲测
才疏学浅,大部分代码还是在看毕向东老师的视频中学习,还请各位大神多多指点。如有结果图,还请给我一张~~