为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

基于java实现的P2P网络课设

2019-09-04 12页 doc 27KB 34阅读

用户头像

is_079973

暂无简介

举报
基于java实现的P2P网络课设一、 课程设计题目 基于P2P的局域网即时通信系统 二、 实验环境及工具 1. 计算机:2台PC机, 2. 操作系统:Windows7 3. 程序设计语言: java 三、 设计要求 1. 实现一个图形用户界面局域网内的消息系统。 2. 功能:建立一个局域网内的简单的P2P消息系统,程序既是服务器又是客户,服务器端口使用3333。 a) 用户注册及对等方列表的获取:对等方A启动后,用户设置自己的信息(用户名,所在组);扫描网段中在线的对等方(3333端口打开),向所有在线对等方的服务端口发送消息,接收方接收到消息后,把对等方...
基于java实现的P2P网络课设
一、 课程设计目 基于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.net.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: 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){ System.exit(1); } }); this.setTitle("杨初喜3108006588"); setVisible(true); } } /** * "发送"的按键处理 * @author yangchuxi * */ class Myw_send_adapter implements ActionListener { SocketStatus status=new SocketStatus(); //    @Override public void actionPerformed(ActionEvent e) {
/
本文档为【基于java实现的P2P网络课设】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索