




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
网络技术编程大作业 3100103844 王博 3100103896 马天亮项目开发人王博马天亮开发人班级电仪1003开发人学号31001038443100103896开发人专业电子信息技术及仪器项目名称基于UDP通信的一对一聊天成绩20%1.文档概述撰写本文档的目的是为使用者提供必要的参考文档,使其能够通过文档说明了解一对一聊天程序的使用过程以及通信原理,为使用者提供基本的指导。使用者或者程序开发人员可以通过本文档,快速的了解本程序的UDP通信机制,本文档还提供了程序代码,方便用户修改、学习。适用范围:聊天程序使用者,功能相似的程序开发人员,以及其他需要了解本系统工作原理的人员。序号术语/缩略语说明1API应用程序编程接口2DatagramSocket数据报套接字3JFrame窗体4Java ApplicationJava桌面应用程序5目标IP要连接的目标地址6Port目标地址需要开放的“大门” 例如常见的8080端口、1394端口7Listener监听器8DatagramPacket数据报包9Awt.eventJava窗口事件类,本实验中用于控制窗口焦点2.软件设计目标以及开发平台 本软件是基于java虚拟机,运用java语言编程,主要平台是电脑,通过UPD通信协议,输入对方IP,实现局域网内的一对一聊天。3.项目分工王博(主要负责软件通信协议部分的编写),马天亮(主要界面的美化)4.软件功能说明以及运行截图 软件能够实现通信双方的相互交流,通信双方都具有收发信息的能力。对方输入我的IP 05我输入他的IP5.软件概要设计51通信流程客户端2客户端1填写对方IP地址填写对方IP地址 绑定一个固定的端口绑定一个固定的端口收到对方信息后处理显示收到对方信息后处理显示结束后断开连接结束后断开连接5.2 重点与难点对于socket本身的编程,必须要清楚的了解相互之间的通信协议,而这一块又不是非常容易,因此可以说这块是难点也是重点6源代码以及注释import java.util.*;import .*;import java.io.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class UDPChat extends JFrame PrintStream st=null;private int port;/端口定义private JButton sendmessage;/发送按钮private JTextField nicknamefield;/昵称private JLabel nickname,IP,Content;java.awt.List list=new java.awt.List(20);/java.awt.List list1=new java.awt.List(20);/接收信息列表(实际上是java.awt类里一个提供可滚动的列表Vector vector=new Vector();/已发IP列表(vector本身是可以自动增加长度的)JComboBox ipInput=new JComboBox(vector);/发送对象ip(JComboBox复选框)JTextField textInput=new JTextField(50);/编辑发送内容组件DatagramSocket socket=null;/(DatagramSocket追求速度并且省去了很多连接麻烦)public UDPChat (int port) this.port=port; try st=new PrintStream(log.txt);/打印启动 catch(FileNotFoundException e) e.printStackTrace(); try socket=new DatagramSocket(port);/新建socket catch(Exception e) e.printStackTrace(st); Container contentPane=this.getContentPane();ipInput.setPreferredSize(new Dimension(120,20);ipInput.setEditable(true);/允许编辑JPanel panel=new JPanel();/JPanel 为javax.swing包中的,为面板容器,可以加入到JFrame中 , 它自身是个容器,可以把其他compont加入到JPanel中,如JButton,JTextArea,JTextFiled等,另外也可以在它上面绘图nicknamefield = new JTextField(5);nicknamefield.setFont(new Font(宋体, Font.BOLD, 16);nicknamefield.setForeground(Color.black);nickname = new JLabel(昵称);nickname.setFont(new Font(宋体, Font.BOLD,16);nickname.setForeground(Color.black);IP = new JLabel(IP);IP.setFont(new Font(宋体, Font.BOLD,16);IP.setForeground(Color.black);Content = new JLabel(内容);Content.setFont(new Font(宋体, Font.BOLD,16);Content.setForeground(Color.black);sendmessage=new JButton(发送信息);panel.setLayout(new BoxLayout(panel,BoxLayout.X_AXIS);contentPane.add(list,BorderLayout.CENTER);contentPane.add(panel,BorderLayout.SOUTH);panel.add(nickname);/面板设置panel.add(nicknamefield);panel.add(IP);panel.add(ipInput);panel.add(Content);panel.add(textInput);panel.add(sendmessage);receive();addListener();/*加入并处理事件听侦*/void addListener()/当在textField组件中输入内容后发送按钮,即发送出输入信息。sendmessage.addActionListener(new ActionListener() /匿名内实现ActionListener接口 public void actionPerformed(ActionEvent e) /send message byte buf=(nicknamefield.getText()+ : +textInput.getText().getBytes(); String message1=nicknamefield.getText()+ : +textInput.getText(); String ip=(String)ipInput.getSelectedItem(); try DatagramPacket dp=new DatagramPacket(buf,buf.length, InetAddress.getByName(ip),8080);/利用数据报协议发送信息 socket.send(dp); if(!vector.contains(ip) vector.add(ip); catch(Exception ex) ipInput.setSelectedItem(null); ex.printStackTrace(st); list.add(message1,0); /输出我说的话 textInput.setText();/清空对话框 );addWindowListener(new WindowAdapter()/关闭窗口 public void windowClosing(WindowEvent e) socket.close(); System.exit(0); );/*接收信息线程*/void receive()new Thread(new Runnable() public void run() byte buf=new byte1024; while(true) try DatagramPacket dp=new DatagramPacket(buf,buf.length);/接收信息 socket.receive(dp); String message=new String(buf,0,dp.getLength(); list.add(message,0); catch(Exception e) if(!socket.isClosed() e.printStackTrace(st); ).start();/主函数public static void main(String args) try UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName();/windows外观设置catch(Exception e) e.printStackTrace();createAndShowGUI();public static void createAndShowGUI()UDPChat chat=new UDPChat(8100);/构造方法直接调用chat.pack();/调整窗口大小chat.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);chat.setVisible(true);7.设计体会说实话这次实验最初可以说是毫无头绪,接着自己也查阅了许多相关的资料,当然也参考了网上很多代码,无形中确实自己理解了通信究竟是怎么一回事,同时也深刻体会到
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 未就业毕业生档案保管协议6篇
- 转让协议书合同模板
- 2025年度安全风险管控培训考试题库(附答案)
- 水培与气雾培种植创新创业项目商业计划书
- 2025年食品安全管理人员业务培训试题附答案
- 2025年高级电子商务师考试题及答案
- 桥梁加固与维护技术方案
- 知识付费产品的市场运营策略分析
- 生产线设备自动化改造方案
- 二年级语文教学全册电子教案
- YS/T 921-2013冰铜
- GB/T 28121-2011非热封型茶叶滤纸
- 2023年廊坊市投资控股集团有限公司招聘笔试模拟试题及答案解析
- 苹果栽培学完整版课件
- 湿性愈合和新型敷料选择课件
- 【教师必备】部编版二年级语文上册 第二单元【集体备课】
- 软件生命周期与开发模型课件
- 实验动物从业人员上岗证考试题库(含近年真题、典型题)
- 印制电路板(PCB)的设计与制作课件
- 数据安全事件应急预案
- 祁县昌源河湿地公园工程建设可研报告(1800万元)
评论
0/150
提交评论