计算机网络专业课程设计.docx

上传人:b****5 文档编号:4536099 上传时间:2022-12-01 格式:DOCX 页数:20 大小:171.52KB
下载 相关 举报
计算机网络专业课程设计.docx_第1页
第1页 / 共20页
计算机网络专业课程设计.docx_第2页
第2页 / 共20页
计算机网络专业课程设计.docx_第3页
第3页 / 共20页
计算机网络专业课程设计.docx_第4页
第4页 / 共20页
计算机网络专业课程设计.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

计算机网络专业课程设计.docx

《计算机网络专业课程设计.docx》由会员分享,可在线阅读,更多相关《计算机网络专业课程设计.docx(20页珍藏版)》请在冰豆网上搜索。

计算机网络专业课程设计.docx

计算机网络专业课程设计

大连工业大学课程设计(论文)任务书

专业

计算机、信计

班级

计09(1-3)、信计091

课程名称

计算机网络

题目

设计编写一个基于socket套接字网络通信程序——聊天、文件传输

或电子邮件程序。

指导老师

路莹,肖鹏

答疑老师

路莹,肖鹏

设计时间

6月25日至6月29日共一周

设计要求

设计(论文)任务和基础要求,包含设计任务、查阅文件、方案设计、说明书(计算、图纸、撰写内容及规范等)、工作量等内容。

课程设计要求:

1、采取B/S模式或C/S模式,上机编写代码,实现服务器/用户端网络通信,并调试成功。

推荐题目最少完成一个,编程实现,不得采取现有应用软件。

要求界面美观,系统操作灵活、便于用户使用:

●聊天程序:

完成广播公共聊天平台和单播私人聊天,并应含有简单帐号管

理功效;

●文件传输程序:

完成服务器端可供传输文件浏览、用户端目标路径可选、指定文

件传输等功效;

●电子邮件程序:

完成用户端在线收、发邮件,管理邮件等功效。

●套接字编程任选题目

2、撰写课程设计汇报——题目、目标、方案设计、调试结果、心得体会。

3、周一查阅资料,设计方案;周二至周四上机编写代码,调试实现;周五演示程序、答辩,并上交课程设计汇报。

4、两名同学一组,自由组合,并依据完成任务量情况署名。

5、撰写课程设计汇报:

封皮(设计题目、专业、班级、学生姓名、学生学号、指导老师姓名、起止时间)、具体任务、软件环境、算法设计思想及步骤图、源代码、运行结果、收获及体会、参考文件

成绩评定方法:

按对套接字基础知识掌握程度,选定软件项目标经典性和难度,分析设计方案是否正确,功效实现是否完善,文档说明是否清楚、正确,格式是否规范等步骤评分。

成绩按优、良、中、及格、不及格五级分制评定。

指导老师签字:

路莹肖鹏系(教研室)主任签字:

 

计算机网络

课程设计汇报

设计题目:

套接字网络通信程序

 

专业计算机科学和技术

学生1计算机092-09王磊

学生2计算机092-12郑林

指导老师路莹,肖鹏

起止时间.6.25—.6.29

 

一、需求分析:

  编写一个聊天程序,能够实现广播公共聊天平台,并含有简单帐号管理功效。

采取c/s模式,基于winsock套接字网络通信程序,可实现双机通信。

二、概要设计

用户端模块功效:

界面:

显示登录按钮,退出按钮,消息显示框,消息发送框,发送按钮等功效性组件,及用户名,服务器IP,参与者等提醒信息。

登录:

输入用户名,服务器IP,点击登陆按钮,实例化一个当地套接字,然后实例化用户端线程用来建立和服务端连接。

退出:

关闭套接字,停止线程运行,并重新置空值。

消息发送:

使用登录时建立套接字发送消息给服务器。

消息接收显示:

把从服务端传输过来消息显示在聊天内容框。

算法设计:

(1)publicclassChatClient{}模块:

该模块作为创建用户方法,其中包含用户端套接字定义模块,用户端图形界面设计模块,连接服务器模块,接收消息线程体模块,用户端按钮监听模块,监听处理模块等。

(2)用户端套接字定义模块:

经过socket类创建一个socket类对象,连接到服务器端所开放端口。

(3)用户端图形界面设计模块:

经过调用JFrame类方法,设计用户端界面按钮和界面属性。

包含五个文本框,三个按钮(发送、登录、退出)。

(4)连接服务器模块:

经过服务器IP地址和指定端口8888连接到服务器。

(5)接收消息线程体模块:

经过创建多线程接收服务器发送消息,加入异常处理。

(6)用户端按钮监听和处理模块:

经过为每个按钮创建监听器,和为每个监听编写处理方法来处理用户端操作。

比如当点击“发送”按钮时,监听器监测到用户动作,经过调用对应程序向服务器端发送用户端消息。

 

服务器端模块功效:

 

服务器端经过创建ServerSocket对象,为用户端提供IP地址和服务器开放端口号,同时服务器还创建了两个列表,一个用来存放用户名,另一个用来存放线程。

服务器端经过监听8888端口,接收来自客服端消息,并将其转发给每个用户端。

算法设计:

(1)publicclassChatServer{}模块:

该模块用来创建ServerSocket对象,开启服务器,经过创建多线程监听开放端口,接收并转发用户端发来消息。

(2)publicvoidstartServer(){}模块:

该模块功效是开启服务器,获取服务器IP,并加入了异常处理功效。

(3)publicvoidrun(){}模块:

该模块是消息接收和转发模块,经过端口接收消息并转发给每一个在线用户端。

 

系统软件环境:

JDK2.0,NetbeansIDE6.9.1

 

三、具体设计

用户端代码:

packagejavaapplication27;

importjava.awt.*;

importjava.awt.event.*;

importjava.io.*;

import.*;

importjavax.swing.*;

importjava.text.*;

importjava.util.*;

/**

*聊天系统用户端

*

*/

publicclassChatClient{

Socketsocket;

DataOutputStreamdos;//数据输出流

DataInputStreamdis;

booleanisConnected=false;

TextAreata1;

TextAreata2;

TextAreata3;

StringuserName;

StringserverIP;

Threadreceiver=newThread(newReceiverThread());

publicChatClient(){

newInterface();

}

//连接到服务器

publicvoidconnect()

{

try

{

socket=newSocket(serverIP,8888);//传入端口号和IP

dos=newDataOutputStream(socket.getOutputStream());//写入数据输出流中

dis=newDataInputStream(socket.getInputStream());

isConnected=true;

}

catch(UnknownHostExceptione)

{

System.out.println("找不到服务器...");

}catch(IOExceptione)

{

e.printStackTrace();

}

}

//接收消息线程体

classReceiverThreadimplementsRunnable

{

Stringstr=null;

publicvoidrun()

{

try

{

while(isConnected)//当连接成功

{

str=dis.readUTF();//读出数据

if(str.startsWith("@"))//假如接收到是在线者名字

{

ta3.setText(str.substring(1,str.length()-1));

}

else

{//假如接收到是聊天内容

ta1.setText(ta1.getText()+"\n"+str);

}

}

}catch(IOExceptione){

e.printStackTrace();

}

}

}

publicstaticvoidmain(String[]args){

try{//设置显示风格

UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");

}catch(Exceptione){

System.out.println("Can'tsetthisLookAndFeel!

");

}

newChatClient();

}

classInterfaceextendsJFrameimplementsActionListener

{//用户端界面

JTextFieldjtf1,jtf2;

publicInterface()

{

JPaneljp1=newJPanel();

jp1.setLayout(null);

ta1=newTextArea("",30,18,TextArea.SCROLLBARS_BOTH);

ta1.setEditable(false);

ta1.setBounds(6,0,420,265);

ta1.setBackground(Color.white);

ta2=newTextArea("",20,18,TextArea.SCROLLBARS_VERTICAL_ONLY);//聊天内容输入区

ta2.setBounds(6,290,420,130);

JButtonjb1=newJButton("发送");

jb1.addActionListener(this);//给发送按钮注册监听器

jb1.setBounds(360,428,60,30);

jp1.add(ta1);

jp1.add(ta2);

jp1.add(jb1);

JPaneljp2=newJPanel();//登录面板

//jp2.setBackground(color);

jtf1=newJTextField(15);

jtf2=newJTextField(15);

JButtonjb2=newJButton("登录");

jb2.addActionListener(this);//给登录按钮注册监听器

JButtonjb3=newJButton("退出");

jb3.addActionListener(this);//给退出按钮注册监听器

ta3=newTextArea("",21,15,TextArea.SCROLLBARS_VERTICAL_ONLY);//在线者显示区

ta3.setEditable(false);

JPaneljp=newJPanel();

//jp.setBackground(color);

jp.add(jb2);

jp.add(jb3);

jp2.setLayout(newBoxLayout(jp2,BoxLayout.Y_AXIS));//指定组件从上到下

jp2.add(newJLabel("用户名"));

jp2.add(jtf1);

jp2.add(newJLabel("服务器IP"));

jp2.add(jtf2);

jp2.add(jp);

jp2.add(newJLabel("参与者"));

jp2.add(ta3);

jp2.add(newJLabel(""));

setBounds(150,150,620,530);

Containerc=getContentPane();

c.setLayout(newBorderLayout());

c.add(jp1,"Center");

c.add(jp2,"East");

setTitle("聊天室");

setResizable(false);//设置窗口大小不可调整

//关闭窗口监听器

addWindowListener(newWindowAdapter()

{

publicvoidwindowClosing(WindowEvente){

if(userName!

=null)

{

try

{

dos.writeUTF("#"+userName+"\n");

dos.flush();

}

catch(IOExceptione1)

{

e1.printStackTrace();

}

if(socket!

=null)

{

System.out.println("用户:

"+userName+"\n已退出!

");

}

}

System.exit(0);

}

});

setVisible(true);

}

publicvoidactionPerformed(ActionEvente)

{

//发送消息

if(e.getActionCommand().equals("发送"))

{

Stringtime=DateFormat.getDateTimeInstance().format(newDate());//设置时间

Stringmessage=userName+"\t"+time+"\n"+ta2.getText().trim();

ta2.setText("");

if(userName==null||userName.equals("")||serverIP==null||serverIP.equals(""))

{

JOptionPane.showMessageDialog(this,"请先登录","提醒",JOptionPane.WARNING_MESSAGE);

}

else

{

try

{

dos.writeUTF(message);

dos.flush();

}

catch(IOExceptione1)

{

e1.printStackTrace();

}

}

}

//登录

elseif(e.getActionCommand().equals("登录"))

{

userName=jtf1.getText();

serverIP=jtf2.getText();

if(userName.equals(""))

{

JOptionPane.showMessageDialog(this,"请输入用户名","警告",JOptionPane.WARNING_MESSAGE);

}

elseif(serverIP.equals("")){

JOptionPane.showMessageDialog(this,"�请输入服务器IP","警告",JOptionPane.WARNING_MESSAGE);

}

if((!

userName.equals(""))&&(!

serverIP.equals(""))&&(!

isConnected))

{

connect();//连接server

try

{

dos.writeUTF("@"+userName+"\n");//发送登陆者名字

dos.flush();

System.out.println("用户:

"+userName+"\n已登录");

receiver.start();//开启接收消息线程

}catch(IOExceptione1){

e1.printStackTrace();

}

}

}

//退出

elseif(e.getActionCommand().equals("退出"))

{

if(userName!

=null)

{

try

{

dos.writeUTF("#"+userName+"\n");//发送退出者名字

dos.flush();

}

catch(IOExceptione1)

{

e1.printStackTrace();

}

if(socket!

=null){

System.out.println("用户:

"+userName+"\n已退出!

");

}

}

System.exit(0);

}

}

}

}

服务器端代码:

packagejavaapplication27;

importjava.io.*;

import.*;

importjava.util.*;

/**

*聊天系统服务器端

*

*

*/

publicclassChatServer{

ServerSocketss;

booleanisStarted=false;

Listclients=newArrayList();//存放线程列表

ListuserNames=newArrayList();//存放用户名列表

Stringactors;

StringuserName;

//开启服务器

publicvoidstartServer()

{Socketsocket=null;

Clientclient=null;

InetAddressserverIP;

try

{ss=newServerSocket(8888);//建立ServerSocket

isStarted=true;

}

catch(IOExceptione)

{e.printStackTrace();

}

try

{

serverIP=InetAddress.getLocalHost();//获取本机IP

System.out.println("服务器IP:

"+serverIP.getHostAddress());

}

catch(Exceptione)

{

System.out.println("Error!

");

}

try

{while(isStarted)

{

socket=ss.accept();

client=newClient(socket);//建立连接,创建一个server端线程和client端通信

newThread(client).start();//开启线程,根本程负责不停监听用户端连接

clients.add(client);//将新线程加入列表

}

}

catch(IOExceptione)

{

e.printStackTrace();

}

finally

{

try

{

ss.close();//关闭socket

}

catch(IOExceptione)

{

e.printStackTrace();

}

}

}

publicstaticvoidmain(String[]args)

{

newChatServer().startServer();

}

//创建一个和client端通信server端线程

classClientimplementsRunnable

{

Sockets;

DataInputStreamdis;

DataOutputStreamdos;

booleanisConnected=false;

publicClient(Sockets)

{

this.s=s;

try

{

dis=newDataInputStream(s.getInputStream());

dos=newDataOutputStream(s.getOutputStream());

isConnected=true;

}

catch(IOExceptione)

{

e.printStackTrace();

}

}

//发送数据

publicvoidsend(Stringstr)

{

try

{

dos.writeUTF(str);

}

catch(IOExceptione)

{

e.printStackTrace();

}

}

publicvoidrun()

{

Stringstr=null;

Clientclient=null;

try

{

while(isConnected)

{

str=dis.readUTF();//接收数据

if(str.startsWith("@"))//接收到是登陆者名

{

actors="@";

userName=str.substring(1,str.length());

System.out.println("用户:

"+userName+"已登录!

");

userNames.add(userName);//把新登录者名加入名字列表

for(inti=0;i

{

actors+=userNames.get(i);

}

str=actors;

}

elseif(str.startsWith("#"))//接收到是退出者名字

{

actors="@";

userNa

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 高中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1