计算机网络课程设计报告书_第1页
计算机网络课程设计报告书_第2页
计算机网络课程设计报告书_第3页
计算机网络课程设计报告书_第4页
计算机网络课程设计报告书_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

1、工业大学课程设计(论文)任务书专 业计算机、信计班 级计09(1-3)、信计091课程名称计算机网络题 目设计编写一个基于socket套接字的网络通信程序聊天、文件传输或电子程序。指导教师路 莹,肖鹏答疑教师路 莹,肖鹏设计时间2012年6 月 25 日 至 2012年6 月 29 日 共 一 周设计要求设计(论文)的任务和基本要求,包括设计任务、查阅文献、方案设计、说明书(计算、图纸、撰写容与规等)、工作量等容。课程设计要求:1、采用B/S模式或C/S模式,上机编写代码,实现服务器/客户端网络通信,并调试成功。推荐题目至少完成一个,编程实现,不得采用现有的应用软件。要求界面美观,系统操作灵活

2、、便于用户使用: l 聊天程序:完成广播的公共聊天平台和单播的私人聊天,并应具有简单的管 理功能;l 文件传输程序:完成服务器端可供传输文件浏览、客户端目标路径可选、指定文件传输等功能;l 电子程序:完成客户端在线收、发,管理等功能。 l 套接字编程任选题目2、撰写课程设计报告题目、目的、方案设计、调试结果、心得体会。3、周一查阅资料,设计方案;周二至周四上机编写代码,调试实现;周五演示程序、答辩,并上交课程设计报告。4、两名同学一组,自由组合,并根据完成任务量情况署名。5、撰写课程设计报告:封皮(设计题目、专业、班级、学生、学生学号、指导教师、起止时间)、具体任务、软件环境、算法设计思想与流

3、程图、源代码、运行结果、收获与体会、参考文献成绩评定方法:按对套接字基本知识的掌握程度,选定软件项目的典型性和难度,分析设计方案是否正确,功能实现是否完善,文档说明是否清楚、准确,格式是否规等环节评分。成绩按优、良、中、与格、不与格五级分制评定。指导教师签字:路莹 肖鹏 系(教研室)主任签字:计算机网络课程设计报告设计题目:套接字网络通信程序专 业 计算机科学与技术 学 生 1 计算机092-09王磊 学 生 2 计算机092-12 林 指导教师 路 莹,肖 鹏 起止时间 2012.6.252012.6.29 一、需求分析: 编写一个聊天程序,能够实现广播的公共聊天平台,并具有简单的管理功能。

4、采用c/s模式,基于winsock套接字的网络通信程序,可实现双机通信。二、概要设计客户端模块功能: 界面:显示登录按钮,退出按钮,消息显示框,消息发送框,发送按钮等功能性组件,与用户名,服务器IP,参与者等提示信息。 登录:输入用户名,服务器IP,点击登陆按钮,实例化一个本地套接字,然后实例化客户端线程用来建立和服务端的连接。 退出:关闭套接字,停止线程运行,并重新置空值。 消息发送:使用登录时建立的套接字发送消息给服务器。 消息接受显示:把从服务端传递过来的消息显示在聊天容框。算法设计:(1) public class ChatClient 模块:该模块作为创建客户的方法,其中包含客户端套

5、接字的定义模块,客户端图形界面设计模块,连接服务器模块,接收消息的线程体模块,客户端按钮监听模块,监听处理模块等。(2) 客户端套接字的定义模块:通过socket类创建一个socket类对象,连接到服务器端所开放的端口。(3) 客户端图形界面设计模块:通过调用JFrame类的方法,设计客户端界面按钮和界面属性。包括五个文本框,三个按钮(发送、登录、退出)。(4) 连接服务器模块:通过服务器的IP地址和指定端口8888连接到服务器。(5) 接收消息的线程体模块:通过创建多线程接收服务器发送的消息,加入异常处理。(6) 客户端按钮监听和处理模块:通过为每个按钮创建监听器,以与为每个监听编写处理方法

6、来处理客户端的操作。例如当点击“发送”按钮时,监听器监测到用户的动作,通过调用相应的程序向服务器端发送客户端消息。服务器端模块功能:服务器端通过创建ServerSocket对象,为客户端提供IP地址和服务器开放的端口号,同时服务器还创建了两个列表,一个用来存放用户名,另一个用来存放线程。服务器端通过监听8888端口,接收来自客服端的消息,并将其转发给每个客户端。算法设计:(1) public class ChatServer 模块:该模块用来创建ServerSocket对象,启动服务器,通过创建的多线程监听开放端口,接收并转发客户端发来的消息。(2) public void startServ

7、er()模块:该模块的功能是启动服务器,获取服务器的IP,并加入了异常处理功能。(3) public void run()模块:该模块是消息接收和转发模块,通过端口接收消息并转发给每一个在线的客户端。系统软件环境:JDK2.0,Netbeans IDE 6.9.1三、详细设计 客户端代码:package javaapplication27;import java.awt.*;import java.awt.event.*;import java.io.*;import .*;import javax.swing.*;import java.text.*;import java.util.*;/

8、* * 聊天系统客户端 * */public class ChatClient Socket socket ; DataOutputStream dos ;/数据输出流 DataInputStream dis ; boolean isConnected=false; TextArea ta1; TextArea ta2; TextArea ta3; String userName; String serverIP; Thread receiver=new Thread(new ReceiverThread(); public ChatClient() new Interface(); /连接到

9、服务器 public void connect() trysocket=new Socket(serverIP,8888); /传入端口号和IP dos=new DataOutputStream(socket.getOutputStream();/写入数据输出流中 dis=new DataInputStream(socket.getInputStream(); isConnected = true;catch (UnknownHostException e)System.out.println("找不到服务器.");catch(IOException e)e.printSt

10、ackTrace(); /接收消息的线程体 class ReceiverThread implements Runnable String str=null;public void run()trywhile(isConnected) /当连接成功str=dis.readUTF(); /读出数据if(str.startsWith("") /如果接收到的是在线者的名字ta3.setText(str.substring(1,str.length()-1);else/如果接收到的是聊天容ta1.setText(ta1.getText()+"n"+str);ca

11、tch(IOException e)e.printStackTrace();public static void main(String args) try /设置显示风格UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");catch(Exception e)System.out.println("Can't set this LookAndFeel!");new ChatClient();class Interface extends JFrame implem

12、ents ActionListener /客户端的界面 JTextField jtf1,jtf2; public Interface() JPanel jp1=new JPanel();jp1.setLayout(null);ta1=new TextArea("", 30, 18, TextArea.SCROLLBARS_BOTH);ta1.setEditable(false);ta1.setBounds(6, 0, 420, 265);ta1.setBackground(Color.white);ta2=new TextArea("", 20, 18,

13、 TextArea.SCROLLBARS_VERTICAL_ONLY); /聊天容输入区ta2.setBounds(6, 290, 420, 130);utton 1=new utton("发送");1.addActionListener(this); /给发送按钮注册监听器1.setBounds(360, 428, 60, 30);jp1.add(ta1);jp1.add(ta2);jp1.add(1);JPanel jp2=new JPanel();/登录面板/jp2.setBackground(color);jtf1=new JTextField(15);jtf2=n

14、ew JTextField(15);utton 2=new utton("登录");2.addActionListener(this); /给登录按钮注册监听器utton 3=new utton("退出");3.addActionListener(this); /给退出按钮注册监听器ta3=new TextArea("", 21, 15, TextArea.SCROLLBARS_VERTICAL_ONLY); /在线者显示区ta3.setEditable(false);JPanel jp=new JPanel();/jp.setBac

15、kground(color);jp.add(2);jp.add(3);jp2.setLayout(new BoxLayout(jp2,BoxLayout.Y_AXIS);/指定组件从上到下jp2.add(new JLabel("用户名");jp2.add(jtf1);jp2.add(new JLabel("服务器IP");jp2.add(jtf2);jp2.add(jp);jp2.add(new JLabel("参与者");jp2.add(ta3);jp2.add(new JLabel(" ");setBounds

16、(150, 150, 620, 530);Container c=getContentPane();c.setLayout(new BorderLayout();c.add(jp1,"Center");c.add(jp2,"East");setTitle("聊天室");setResizable(false); /设置窗口大小不可调整/关闭窗口的监听器addWindowListener(new WindowAdapter()public void windowClosing(WindowEvent e) if(userName!=nul

17、l)trydos.writeUTF("#"+userName+"n");dos.flush();catch (IOException e1)e1.printStackTrace();if(socket!=null)System.out.println("用户:"+userName+"n已退出!");System.exit(0););setVisible(true); public void actionPerformed(ActionEvent e)/发送消息if(e.getActionCommand().equa

18、ls("发送")String time=DateFormat.getDateTimeInstance().format(new Date(); /设置时间String message=userName+"t"+time+"n "+ta2.getText().trim();ta2.setText("");if(userName=null|userName.equals("")|serverIP=null|serverIP.equals("")JOptionPane.showMe

19、ssageDialog(this,"请先登录","提醒",JOptionPane.WARNING_MESSAGE);elsetrydos.writeUTF(message);dos.flush();catch (IOException e1)e1.printStackTrace();/登录else if(e.getActionCommand().equals("登录")userName=jtf1.getText();serverIP=jtf2.getText();if(userName.equals("")JOpt

20、ionPane.showMessageDialog(this,"请输入用户名","警告",JOptionPane.WARNING_MESSAGE);else if(serverIP.equals("") JOptionPane.showMessageDialog(this,"请输入服务器IP","警告",JOptionPane.WARNING_MESSAGE);if(!userName.equals("")&&(!serverIP.equals("&

21、quot;)&&(!isConnected)connect();/连接servertrydos.writeUTF(""+userName+"n"); /发送登陆者的名字dos.flush();System.out.println("用户:"+userName+"n已登录");receiver.start(); /启动接收消息的线程 catch (IOException e1) e1.printStackTrace();/退出else if(e.getActionCommand().equals(&q

22、uot;退出")if(userName!=null)trydos.writeUTF("#"+userName+"n"); /发送退出者的名字dos.flush();catch (IOException e1)e1.printStackTrace();if(socket!=null) System.out.println("用户:"+userName+"n已退出!");System.exit(0);服务器端代码:package javaapplication27;import java.io.*;impor

23、t .*;import java.util.*;/* * 聊天系统服务器端 * * */public class ChatServer ServerSocket ss;boolean isStarted=false;List<Client> clients=new ArrayList<Client>(); /存放线程的列表List<String> userNames=new ArrayList<String>(); /存放用户名的列表String actors;String userName;/启动服务器public void startServ

24、er()Socket socket=null;Client client=null;InetAddress serverIP;tryss=new ServerSocket(8888); /建立Server SocketisStarted=true;catch(IOException e)e.printStackTrace();tryserverIP=InetAddress.getLocalHost(); /获取本机IPSystem.out.println("服务器IP:"+serverIP.getHostAddress();catch(Exception e)System.

25、out.println("Error!");trywhile(isStarted)socket=ss.accept();client=new Client(socket); /建立连接,创建一个server端线程与client端通信new Thread(client).start(); /启动线程,主线程负责不断监听客户端的连接clients.add(client); /将新线程加入列表catch(IOException e)e.printStackTrace();finallytryss.close();/关闭socketcatch(IOException e)e.pri

26、ntStackTrace();public static void main(String args)new ChatServer().startServer(); /创建一个与client端通信的server端线程class Client implements RunnableSocket s;DataInputStream dis;DataOutputStream dos;boolean isConnected=false;public Client(Socket s)this.s=s;trydis=new DataInputStream(s.getInputStream();dos=ne

27、w DataOutputStream(s.getOutputStream();isConnected=true;catch(IOException e)e.printStackTrace();/发送数据public void send(String str)trydos.writeUTF(str);catch(IOException e)e.printStackTrace();public void run()String str=null;Client client=null;trywhile(isConnected)str=dis.readUTF(); /接收数据if(str.starts

28、With("") /接收到的是登陆者名actors=""userName=str.substring(1,str.length();System.out.println("用户:"+userName+"已登录!");userNames.add(userName); /把新登录者名加入名字列表for(int i=0;i<userNames.size();i+)actors+=userNames.get(i);str=actors;else if(str.startsWith("#") /接收

29、到的是退出者的名字actors=""userName=str.substring(1,str.length();for(int i=0;i<userNames.size();i+)if(userName.equals(userNames.get(i)userNames.remove(i); /从列表中删除退出者的名字clients.remove(i); /从列表中删除退出者的线程break;for(int i=0;i<userNames.size();i+)actors+=userNames.get(i);str=actors;for(int i=0;i<clients.size();i+

温馨提示

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

评论

0/150

提交评论