一、课程设计题目
基于P2P的局域网即时通信系统
二、实验环境及工具
1.计算机:2台PC机,
2.操作系统:Windows7
3.程序设计语言: java
三、设计要求
1.实现一个图形用户界面局域网内的消息系统。
2.功能:建立一个局域网内的简单的P2P消息系统,程序既是服务器又是客户,服务器端口使用3333。
a)用户注册及对等方列表的获取:对等方A启动后,用户设置自己的信息(用户名,所在组)
;扫描网段中在线的对等方(3333端口打开),向所有在线对等方的服务端口发送消息,接收方接收到消息后,把对等方A加入到自己的用户列表中,并发应答消息;对等方A把回应消息的其它对等方加入用户列表。双方交换的消息格式自己根据需要定义,至少包括用户名、IP地址。
b)发送消息和文件:用户在列表中选择用户,与用户建立TCP连接,发送文件或消息。
3.用户界面:界面上包括对等方列表;消息显示列表;消息输入框;文件传输进程显示及操作按钮或菜单。
四、设计内容与步骤
1.学习Socket和TCP的基本原理和通信机制
2.功能设计和界面设计
3.服务器功能的设计和实现
4.客户功能的设计和实现
5.课程设计任务说明书
五、系统设计
1.基本功能
(1)当某个用户上线后以自己的主机ip进入聊天室以后,自己的ip就会在“当前聊天者”的列表显示出来
      (2)用户通过“发送”按钮可以将自己的要“发送的话”发送出去,同个局域网的在线用户都会收到
      (3)通过双击用户的ip,弹出一对一聊天对话框。输入要说的话,可以喝某个用户进行一对一的聊天。
      (4)通过“发送文件”按钮,弹出文件选择框,选择文件。可以把文件发送给跟你正在聊天的用户。
      (5)如果有一个用户发送文件或者话给另外一个用户,这时候另外一个用户用收到一
个提醒小窗口。这时候就可以打开对话框接受文件和话。
      (6)如果对方用户已经成功接受了你的发送的文件,这时候会弹出对话框提醒你。
2.结构关系图
3.详细设计
(1)多播的实现
多播主要是通过UDP协议实现的。在java中,可以通过java.DatagramPacket 这个类来实现的。只要你传入广播地址和内容以及端口,在这个广播地址里面的在线用户都可以收到这个消息。
(2)一对一发送的实现。
因为一对一一定要有2台主机相连。所以我的实现的方法是先通过UDP发送3个字节探测是不是连接成功,如果成功才用TCP来连接。这里主要是用到java的socket
(3)每个类的主要作用
PPfriend:主要是程序的启动类。继承了JFrame
Mywindow: 画出主界面。继承了JFrame
Dialog: 画出一对一聊天界面。继承了JFrame
ReceiveIp:获得所有在线用户的ip以及消息。继承了Thread
Receive: 接收文件。继承了Thread    继承了Thread
RecevieToOne:建立TCP连接,接受某人的消息
SendFile:发送文件。继承了Thread
SendIp:发送自己的ip。继承了Thread
SendSMG:发消息。继承了Thread
SendToOne: 建立连接,确定发送文件,查发送文件,发送给某人消息。继承了Thread
SocketStatus:当前程序的状态:例如接受消息。
六、代码清单
1.Dialog.java基于java的课程设计题目:
      package com.qgjava.p2p;
/**
* 当双击“当前聊天者列表”中的IP,弹出的对话框界面
* @author yangchuxi
*
*/
public class Dialog extends javax.swing.JFrame {
    TextArea chat;
    TextField sendchat;
    Button sbutton,fbutton,refile;
    public Dialog(String name) {
        super(name);
        Label title=new Label("密函:");
        //创建个只读文本,用来显示别人发过来的消息
        chat=new TextArea(20,20);
        chat.setEditable(false);
        //创建个允许编辑的文本,用来发送一对一消息
        sendchat=new TextField(25);
//        sendchat.setEditable(true);
        sbutton=new Button("发送");
        fbutton=new Button("发送文件");
        refile=new Button("接收文件");
        refile.setEnabled(false);
        Panel p=new Panel(new FlowLayout(FlowLayout.LEFT));
        //setLayout(new BorderLayout());
        setBackground(Color.YELLOW);
        setTitle("一对一聊天");
        setSize(400, 200);
        setLocation(450, 100);
        setResizable(false);
        add("North",title);
        add("Center",chat);
        p.add(sendchat);
        p.add(sbutton);
        p.add(fbutton);
        p.add(refile);
        add("South",p);
//        add("East",sendchat);
       
        addWindowListener(new WindowAdapter(){
            public void windowClosed(WindowEvent e){
                e.getWindow().dispose();
            }
        });
        setVisible(true);
    }
}
2.Mywindow.java
    package com.qgjava.p2p;
//用程序可以将其他组件放在面板提供的空间内
class Apanel extends Panel{
    TextArea chat;
    APanel2 aPanel2;
    public Apanel(){
        //创建个只读文本
        chat=new TextArea(40,40);
        chat.setEditable(false);
        aPanel2=new APanel2();
        //布置容器的边框布局
        setLayout(new BorderLayout());
        add("West",chat);
        add("East",aPanel2);
    }
}
class APanel2 extends Panel{
    java.awt.List list;
    APanel2(){
        //List 组件为用户提供了一个可滚动的单选文本项列表,
        list=new List(25,false);
        setLayout(new BorderLayout());
        add("Center",list);
        add("North",new Label("当前聊天者列表"));
        add("East",new Label());
        add("South",new Label("双击一个人的昵称可以进行交谈"));
       
    }
}
class BPanel extends Panel{
    TextField msg;
    Button button1,button2,button3,button4,button5;
    public BPanel(){
        msg=new TextField(30);
        button1=new Button("发送");
        button2=new Button("刷新谈话区");
        button3=new Button("刷新在线用户");
      // button2.addActionListener(new Myw_reflash_msg_adapter());
        setLayout(new FlowLayout(FlowLayout.LEFT));
        add(new Label("发送的话"));
        add(msg);
/**
* 显示聊天界面的各个模块
* @author yangchuxi
*
*/
public class Mywindow extends JFrame{
    //PPfriend friend=new PPfriend();
      Label person;
      Apanel pa;
      BPanel pb;
     
      public Mywindow(){
          super();
          person=new Label("聊天记录");
          pa=new Apanel();
          pb=new BPanel();
          setLayout(new BorderLayout());
          setBackground(Color.YELLOW);
          setSize(550, 450);
          setLocation(450, 100);
          setResizable(false);
          add("North",person);
          add("Center",pa);
          add("South",pb);
          //此类存在的目的是方便创建侦听器对象
          addWindowListener(new WindowAdapter() {
              public void windowClosing(WindowEvent e){
                  it(1);
              }
          });
          this.setTitle("杨初喜3108006588");
          setVisible(true);
      }
     
}
/**
* "发送"的按键处理
* @author yangchuxi
*
*/
class Myw_send_adapter implements ActionListener {
    SocketStatus status=new SocketStatus();
//    @Override
    public void actionPerformed(ActionEvent e) {

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。