TCP通信功能实现计算机课程设计说明书Word文档下载推荐.docx
《TCP通信功能实现计算机课程设计说明书Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《TCP通信功能实现计算机课程设计说明书Word文档下载推荐.docx(23页珍藏版)》请在冰豆网上搜索。
Java语言是现今使用最为广泛的编程语言,它的日益流行,尤其是Java与IntemetWeb的密切结合,使JAVA语言在全球取得了巨大的成功。
Java语言的多平台、面向对象、继承、封装、分布式、多线程及完善的安全机制等特色,成为现代信息系统建设与日常应用中的良好的开发平台和运行环境。
Java语言是基于网络计算的语言,网络应用是Java语言的重要应用之一。
Java提供的类库支持TCP/IP协议,应用程序可通过URL地址,在访问网络上任何地方的对象时,如同访问本地文件一样简单。
(三)JAVA中的ServerSocket类与Socket类
图3Java程序中Socket通信流程示意图
三、测试
(1)服务器端
图4服务器端界面
图5文件浏览
界面说明:
文件选择:
能打开Window下的文件浏览,选择自己想要发送的文件,并能将文件名以及所在路径分别显示在两个文本框中(图5)。
点击建立连接:
打开服务器,建立网络连接。
如若没有打开服务器客户端无法连接到网络。
(2)客户端
图6客户端
选择路径:
选择接受文件保存的路径,如果没有选择路径时,则默认保存在D盘目录下。
点击建立连接:
点击后,则打开IP网络连接,如果服务器端没有连接时,则会抛出拒绝网络连接异常:
.ConnectException:
Connectionrefused(如图7)。
图7.ConnectException异常
(3)控制面板相关信息提示
在控制面板中会有相关信息显示,便于在使用者能更好的了解该程序。
(4)功能实现
该TCP通信系统能够实现服务器端向客户端传送文件的功能,对于文件的类型以及大小都没有要求(如图8)。
测试发送文件包含了PNG图像、WORD文档、EXE应用程序、txt文本。
图8接受文件列表
四、设计总结
(一)总评
在现今互联网飞速发展的今天,网络通信发展的越来越迅速,所覆盖的范围也越来越广泛,作为计算机相关专业的我们,更是感受到了互联网的强大力量,了解网络传输的原理更是势在必行。
通过此次计算机网络课程设计,帮我回忆、巩固了上学期的计算机网络知识,并且通过课程设计,将理论知识运用于实践当中来。
同时JavaSocket网络编程的应用越来越广泛,其高效性,快捷性也得到了广大的软件开发商的喜爱,作为一种底层通信的先进开发手段,它在TCP,UDP,URL等网络通信方面的优势更加突出,因此选择了JAVA作为此次课程设计的开发语言。
此次计算机网络课程设计我选择了TCP通信,主要是实现服务器端和客户端之间文件传输。
TCP通信要求服务器端要处于监听阶段,即要先打开服务器端。
TCP要求服务器端和客户端都处于连接状态才能完成文件的传送,如果有一方断开则会停止传送。
(二)遇到的问题以及解决方案
1.一开始对于服务器端和客户端理解不够透彻,于是先打开客户端在打开服务器端,结果抛出网络连接异常。
后面通过查找资料后,明白错误的原由,在接下来的操作中,避免了异常抛出。
2.抛出java.io.FileNotFoundException:
D:
\接收文件(拒绝访问。
)异常。
后面通过资料的查阅,发现是因为在文件接收,新建文件中,文件名与路径名之间的错误使用,导致异常抛出。
具体代码如下:
FileOutputStreamfos1=newFileOutputStream(FileClientFrm.getpath());
Getpath()函数的返回值路径,因此出现错误。
解决方法是将代码程序修改为:
FileOutputStreamfos1=newFileOutputStream(FileClientFrm.getpath()+fileName);
五、使用说明
1)打开服务器端,点击“文件选择”选择要发送的文件—>
点击“建立连接”,调用SendFileServer.server()函数,打开服务器监听
2)打开客户端口,可选“选择路径”按钮,选择文件保存路径,以及另存为文件名称;
直接点击“建立连接”,则默认保存在D盘目录下。
3)文件传送成功。
在服务器端控制面板上会显示文件发送结束,表示文件传输成功。
六、附录(代码程序)
//服务器端代码
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importjavax.swing.JTextField;
importjava.awt.FileDialog;
importjava.awt.TextArea;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.awt.event.WindowAdapter;
importjava.awt.event.WindowEvent;
importjava.io.BufferedReader;
importjava.io.File;
importjava.io.FileReader;
importjava.io.FileInputStream;
importjava.io.IOException;
importjava.io.OutputStream;
import.ServerSocket;
import.Socket;
importjava.util.Scanner;
//各种包的导入
publicclassFileServer{
publicstaticvoidmain(Stringargs[])
{
FileServerFrmfrm=newFileServerFrm();
//newFileServer();
}
}
classFileServerFrmextendsJFrameimplementsActionListener
{
FileDialogop;
//文件数据类
staticJTextFieldtarea1=newJTextField();
staticJTextFieldtarea2=newJTextField();
JFramejf=newJFrame("
服务器端"
);
JLabellab=newJLabel("
要发送的文件名称是:
"
JButtonFilechooce=newJButton("
文件选择"
JButtonlink=newJButton("
点击建立连接"
//图形界面设计(控件定义)
staticStringgetname()
returntarea1.getText();
staticStringgetpath()
{
returntarea2.getText();
}
//文件打开
publicFileServerFrm()
super("
打开和保存文件"
//图形界面设计(添加控件)
jf.setSize(600,400);
jf.setLayout(null);
jf.add(Filechooce);
jf.add(link);
jf.add(tarea1);
jf.add(tarea2);
jf.add(lab);
Filechooce.setLocation(400,200);
Filechooce.setSize(100,30);
link.setLocation(100,250);
link.setSize(300,50);
lab.setLocation(20,10);
lab.setSize(300,50);
tarea1.setLocation(50,70);
tarea1.setSize(500,50);
tarea2.setLocation(50,140);
tarea2.setSize(500,50);
jf.setVisible(true);
jf.setResizable(true);
op=newFileDialog(this,"
打开"
FileDialog.LOAD);
Filechooce.addActionListener(this);
link.addActionListener(this);
addWindowListener
(
newWindowAdapter(){
publicvoidwindowClosing(WindowEvente)
{
System.exit(0);
}
}
);
//SendFileServer.server();
publicvoidactionPerformed(ActionEvente)
if(e.getSource()==Filechooce)
Stringstr,str1,str2;
op.setVisible(true);
try
{
Filef1=newFile(op.getDirectory(),op.getFile());
FileReaderfr=newFileReader(f1);
BufferedReaderbr=newBufferedReader(fr);
tarea1.setText("
tarea2.setText("
str1=f1.getName();
str2=f1.getPath();
while((str=br.readLine())!
=null)
{
tarea1.setText(str1+'
\n'
tarea2.setText(str2+'
}
fr.close();
catch(Exceptione1)
{}
System.out.println("
Fileissend."
elseif(e.getSource()==link)
建立连接."
SendFileServer.server();
/*
*用TCP进行文件传输
*此文件为服务器文件
*当接受到客户端的请求之后,先向其传输文件名
*当客户端接受完毕之后,向客户端传输文件
**/
publicclassSendFileServerimplementsRunnable{
//服务器监听端口
privatestaticfinalintMONITORPORT=12345;
privateSockets;
publicSendFileServer(Sockets){
super();
this.s=s;
publicstaticvoidserver()
try{
//创建服务器socket
ServerSocketss=newServerSocket(MONITORPORT);
while(true)
//接收到一个客户端连接之后,创建一个新的线程进行服务
//并将联通的socket传给该线程
Sockets=ss.accept();
newThread(newSendFileServer(s)).start();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
publicvoidrun(){
//TODOAuto-generatedmethodstub
byte[]buf=newbyte[100];
OutputStreamos=null;
FileInputStreamfins=null;
os=s.getOutputStream();
//文件路径
StringfilePath=FileServerFrm.getpath();
//获取选择的文件所在路径
//文件名
StringfileName=FileServerFrm.getname();
//获取选择的文件名
将文件名:
+fileName+"
传输过去"
//先将文件名传输过去
os.write(fileName.getBytes());
文件名是:
+FileServerFrm.getname());
路径是:
+FileServerFrm.getpath());
开始传输文件"
//将文件传输过去
//获取文件
fins=newFileInputStream(filePath);
intdata;
//通过fins读取文件,并通过os将文件传输
while(-1!
=(data=fins.read()))
os.write(data);
文件传输结束"
}finally
try{
if(fins!
=null)fins.close();
if(os!
=null)os.close();
this.s.close();
}catch(IOExceptione){
e.printStackTrace();
privateObjectactionPerformed(){
returnnull;
//客户端程序
importjava.io.BufferedWriter;
importjava.io.FileWriter;
publicclassFileClient{
publicstaticvoidmain(String[]args){
FileClientFrmFileClient=newFileClientFrm();
classFileClientFrmextendsJFrameimplementsActionListener
staticFileDialogsv;
客户端界面"
保存的文件名和路径"
选择路径"
//客户端图形界面设计(控件定义)
returnsv.getFile();
staticStringgetpath()
returnsv.getDirectory();
publicFileClientFrm()
//界面图形界面设计(控件添加、位置设计)
//保存路径
publicvoid