一对一聊天程序(java).doc_第1页
一对一聊天程序(java).doc_第2页
一对一聊天程序(java).doc_第3页
一对一聊天程序(java).doc_第4页
一对一聊天程序(java).doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机网络与通信实习报告 实 习 题 目 一对一聊天程序(java) 学生专业班级 学生姓名(学号) 指 导 教 师 完 成 时 间 2010年5月21日 实 习(设计)地点 信息楼139机房 2010 年5月21日一、实习题目实现一个一对一的聊天程序2、 原理概述在编程软件的基础上采用TCP协议的网络编程实现一款点对点的聊天程序,使用Java语言编写,将程序设计分为客户端和服务器端。其中此程序客户端和服务器端链接时,首先输入服务器端的IP地址和端口号,当IP地址正确并且端口号没有被占用时,可以进行客户端和服务器端的链接,在客户端与服务器端相连后,在发送的文本框中输入你想发送的信息,然后点击发送客户端(服务器端)就能在文本框中显示相应的内容。当服务器和客户端没有链接或断开的时候信息不可以发送并能提示“没有与服务器链接”。三、设计方案1、根据实习任务书确定程序编写目标,主要功能,时间安排等。2、分析需求,确定程序主要框架、所需要的编程语言、以及开发环境。3、研究研究一对一聊天程序的主要功能,一对一聊天程序的原理。4、按需求创建项目,开始编码。5、完成编码,进行单元测试和系统测试。6、完成测试,进行封装,用Eclipse直接打包成jar文件。4、 程序编写 这是直接在MyEclipse6.0.1环境下进行的编程开发服务器端程序:ChatServer:import java.io.*;import .*;import java.util.*;public class ChatServer boolean started = false;ServerSocket ss = null;List clients = new ArrayList();public static void main(String args) new ChatServer().start();/*创建服务器链接的服务端口,此程序中用的端口号是8888,当8888端口正在使用时,用try.catch来捕捉错误(BindException 和IOException),当捕捉到BindException时,系统会打印出“端口使用中. 请关掉相关程序并重新运行服务器!”*/public void start() try ss = new ServerSocket(8888);started = true; catch (BindException e) System.out.println(端口使用中.);System.out.println(请关掉相关程序并重新运行服务器!);System.exit(0); catch (IOException e) e.printStackTrace();/* 此时用一个while循环,来判断是否启动了服务器,当启动服务器时,就执行while循环,创建一个新的客户端try while(started) Socket s = ss.accept();Client c = new Client(s);System.out.println(a client connected!);new Thread(c).start();clients.add(c);/dis.close(); catch (IOException e) e.printStackTrace(); finally try ss.close(); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();/*线程的应用,进行变量的初始化*/class Client implements Runnable private Socket s;private DataInputStream dis = null;private DataOutputStream dos = null;private boolean bConnected = false;public Client(Socket s) this.s = s;try dis = new DataInputStream(s.getInputStream();dos = new DataOutputStream(s.getOutputStream();bConnected = true; catch (IOException e) e.printStackTrace();/* 数据的读写 */public void send(String str) try dos.writeUTF(str); catch (IOException e) clients.remove(this);System.out.println(对方退出了!我从List里面去掉了!);/e.printStackTrace();/* Catch 到任何的Exception 都要把s等服务器端的运行项关闭,可能是客户端那端已经关闭了,也可能是中间传输的时候出现了意外情况,导致链接中断 */public void run() try while(bConnected) String str = dis.readUTF();System.out.println(str);for(int i=0; iclients.size(); i+) Client c = clients.get(i);c.send(str);/System.out.println( a string send !);/*for(Iterator it = clients.iterator(); it.hasNext(); ) Client c = it.next();c.send(str);*/*Iterator it = clients.iterator();while(it.hasNext() Client c = it.next();c.send(str);*/ catch (EOFException e) System.out.println(Client closed!); catch (IOException e) e.printStackTrace(); finally try if(dis != null) dis.close();if(dos != null) dos.close();if(s != null) s.close();/s = null; catch (IOException e1) e1.printStackTrace();客户端程序:ChatClient:import java.awt.*;import java.awt.event.*;import java.io.*;import .*;/*初始化变量*/public class ChatClient extends Frame Socket s = null;DataOutputStream dos = null;DataInputStream dis = null;private boolean bConnected = false;TextField tfTxt = new TextField();TextArea taContent = new TextArea();Thread tRecv = new Thread(new RecvThread(); public static void main(String args) new ChatClient().launchFrame(); /*设置聊天窗口,包括当程序启动时窗口的位置,大小等*/public void launchFrame() setLocation(400, 300);this.setSize(300, 300);add(tfTxt, BorderLayout.SOUTH);add(taContent, BorderLayout.NORTH);pack();this.addWindowListener(new WindowAdapter() Overridepublic void windowClosing(WindowEvent arg0) disconnect();System.exit(0););tfTxt.addActionListener(new TFListener();setVisible(true);connect();tRecv.start();/*此段程序是服务器和客户端链接的程序,创建套接字,“铺设”数据流管道,用来传达服务器和客户端的信息*/public void connect() try s = new Socket(, 8888);dos = new DataOutputStream(s.getOutputStream();dis = new DataInputStream(s.getInputStream();System.out.println(connected!);bConnected = true; catch (UnknownHostException e) e.printStackTrace(); catch (IOException e) e.printStackTrace();/*此段程序是当断开链接时,关闭dos,dis,s等还在运行的服务程序,因为系统不会自动关闭这些运行的程序,需要自己编写代码关闭这些程序,否则这些程序会一直运行下去*/public void disconnect() try dos.close();dis.close();s.close(); catch (IOException e) e.printStackTrace();/*try bConnected = false;tRecv.join(); catch(InterruptedException e) e.printStackTrace(); finally try dos.close();dis.close();s.close(); catch (IOException e) e.printStackTrace();*/*在客户端和服务器端分别进行读写数据*/private class TFListener implements ActionListener public void actionPerformed(ActionEvent e) String str = tfTxt.getText().trim();/taContent.setText(str);tfTxt.setText();try /System.out.println(s);dos.writeUTF(str);dos.flush();/dos.close(); catch (IOException e1) e1.printStackTrace();/*重写run方法,做关闭程序后的一些处理*/private class RecvThread implements Runnable public void run() try while(bConnected) String str = dis.readUTF();/System.out.println(str);taContent.setText(taContent.getText() + str + n); catch (SocketException e) System.out.println(退出了,bye!); catch (EOFException e) System.out.println(推出了,bye - bye!); catch (IOException e) e.printStackTrace(); 五、运行结果运行结果如图 启动两个客户端,当两个客户端成功链接服务器端后,就可以进行一对一的聊天了,两个客户都可以给对方发送消息,而且对方能收到。六、实习心得和体会通过这次的计算机网络实习,让我掌握了计算机网络课上没有学过的好多知识,平时经常用到QQ聊天,但是并不知道其中的原理,通过这次实习之后,才明白了聊天程序的原理。让我知道网络方向的学习和软件的开发有很大的不同,需要更加细心和负责才能完成每一个小小的任务。通过了解聊天程序的原理和

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论