You are on page 1of 9

计算机网络课程设计报告基于 Socket

在线数据传输的设计与实现
数据通信与计算机网络







指导老师;苏军
学 院:运算机科学学院
专 业:2019 级电子信息科学与技术
组 长:学号:
组 员: 学号:2
组 员: 学号:

基于 Socket 在线数据传输的设计与实现

摘 要
近年来随着运算机技术的飞速进展,专门是 Internet 技术的进展,
差不多深刻的改变到了人们生活的方方面面。这时过去的种种陈旧
的通讯方式,都差不多不能满足现代生活的需要。人们期望能够用
更低廉的价格,更加方便快捷的方式,来实现即时通讯。这时开发
一套基于 Internet 技术的网络数据传输系统变得尤为重要。
Internet 是目前世界上最大的运算机互联网络,它遍布全球,
并将世界各地不同规模和大小的网络连接成为一个整体。目前基于
Internet 的应用差不多专门多了,例如网上收发邮件、网上购物、
网上看电影等等。这些应用无不在改变人们的生活传统生活方式。
本课题要紧研究的是基于 Socket 的数据传输软件,此软件分为
服务器程序和客户端程序,本课题的目标是能实现用户在客户端与
服务器端传递信息。要紧研究开发内容是:熟悉系统开发平台,探
究在此开发平台下,利用 Socket 编程技术、TCP/IP 协议等进行谈天
软件的实际开发。
一.课程设计性质:
独立课设
二.课程设计目的和任务:
1、把握数据通信和运算机网络的差不多原理
2、把握数据通信和运算机网络设计、分析和实现方法
3、提高学生编制网络通信程序、网络应用服务程序的能力
三.课程设计差不多内容及要求:
差不多内容:网络数据通信的差不多方法及实现。
差不多要求:依照选定的项目,课题小组成员认真查阅相关资
料,发挥学生的主体作用,提出设计方案,老师参与,进行讨论和
分析,最终确定设计方案。在此基础上,合理分工,协同完成项目
的设计与实现,最后完成课程设计的报告撰写。
四.课程设计平台
基于 Eclipse 集成开发环境
五.课程设计原理:
1. TCP/IP 协议
TCP/IP 是 Transmission Control Protocol/Internet
Protocol 的简写,中文译名为传输操纵协议/互联网络协议,该协
议是 Internet 最差不多的协议,简单地说,确实是由底层的 IP 协
议和 TCP 协议组成的。TCP/IP 协议的开发工作始于 70 年代,是用于
互联网的第一套协议。
(1)TCP/IP 参考模型
TCP/IP 协议的开发研制人员将 Internet 分为五个层次,以便于
明白得,它也称为互联网分层模型或互联网分层参考模型,如下所
示:
物理层:对应于网络的差不多硬件,这也是 Internet 物理构成,
即我们能够看得见的硬设备,如 PC 机、互连网服务器、网络设备等,
必须对这些硬设备的电气特性作一个规范,使这些设备都能够互相
连接幷兼容使用。
网络接口层:它定义了将资料组成正确帧的规程和在网络中传
输帧的规程,帧是指一串资料,它是资料在网络中传输的单位。
互联网层:本层定义了互联网中传输的“信息包”格式,以及
从一个用户通过一个或多个路由器到最终目标的"信息包"转发机制。

传输层:为两个用户进程之间建立、治理和拆除可靠而又有效
的端到端连接。
应用层:它定义了应用程序使用互联网的规程。
(2)网际协议 IP
Internet 上使用的一个关键的底层协议是网际协议,通常称
IP 协议。我们利用一个共同遵守的通信协议,从而使 Internet 成
为一个承诺连接不同类型的运算机和不同操作系统的网络。要使两
台运算机彼此之间进行通信,必须使两台运算机使用同一种"语言"。
通信协议正像两台运算机交换信息所使用的共同语言,它规定了通
信双方在通信中所应共同遵守的约定。
运算机的通信协议精确地定义了运算机在彼此通信过程的所有
细节。例如,每台运算机发送的信息格式和含义,在什么情形下应
发送规定的专门信息,以及接收方的运算机应做出哪些应答等等。
网际协议 IP 协议提供了能适应各种各样网络硬件的灵活性,对
底层网络硬件几乎没有任何要求,任何一个网络只要能够从一个地
点 向 另 一 个 地 点 传 送 二 进 制 数 据 , 就 能 够 使 用 IP 协 议 加 入
Internet 了。
假 如 期 望 能 在 Internet 上 进 行 交 流 和 通 信 , 则 每 台 连 上
Internet 的运算机都必须遵守 IP 协议。为此使用 Internet 的每
台运算机都必须运行 IP 软件,以便时刻预备发送或接收信息。
IP 协议关于网络通信有着重要的意义:网络中的运算机通过安
装 IP 软件,使许许多多的局域网络构成了一个庞大而又严密的通信
系统。从而使 Internet 看起来仿佛是真实存在的,但实际上它是
一种幷不存在的虚拟网络,只只是是利用 IP 协议把全世界上所有情
愿接入 Internet 的运算机局域网络连接起来,使得它们彼此之间
都能够通信。
(3)传输操纵协议 TCP
尽管运算机通过安装 IP 软件,从而保证了运算机之间能够发送
和接收资料,但 IP 协议还不能解决资料分组在传输过程中可能显现
的问题。因此,若要解决可能显现的问题,连上 Internet 的运算
机还需要安装 TCP 协议来提供可靠的幷且无差错的通信服务。
TCP 协议被称作一种端对端协议。这是因为它为两台运算机之
间的连接起了重要作用:当一台运算机需要与另一台远程运算机连
接时,TCP 协议会让它们建立一个连接、发送和接收资料以及终止
连接。
传输操纵协议 TCP 协议利用重发技术和拥塞操纵机制,向应用
程序提供可靠的通信连接,使它能够自动适应网上的各种变化。即
使在 Internet 临时显现堵塞的情形下,TCP 也能够保证通信的可
靠。
众所周知, Internet 是一个庞大的国际性网络,网络上的拥
挤和闲暇时刻总是交替不定的,加上传送的距离也远近不同,因此
传输资料所用时刻也会变化不定。 TCP 协议具有自动调整 "超时
值"的功能,能专门好地适应 Internet 上各种各样的变化,确保传
输数值的正确。
因此,从上面我们能够了解到:IP 协议只保证运算机能发送和
接收分组资料,而 TCP 协议则可提供一个可靠的、可流控的、全双
工的信息流传输服务。
综上所述,尽管 IP 和 TCP 这两个协议的功能不尽相同,也能够
分开单独使用,但它们是在同一时期作为一个协议来设计的,幷且
在功能上也是互补的。只有两者的结合,才能保证 Internet 在复
杂的环境下正常运行。凡是要连接到 Internet 的运算机,都必须
同时安装和使用这两个协议,因此在实际中常把这两个协议统称作
TCP/IP 协议。
2 UDP 协议
UDP(User Data Protocol,用户数据报协议)是与 TCP 相对应
的协议。它是面向非连接的协议,它不与对方建立连接,而是直截
了当就把数据包发送过去!
UDP 适用于一次只传送少量数据、对可靠性要求不高的应用环
境。比如,我们经常使用“ping”命令来测试两台主机之间 TCP/IP 通
信是否正常,事实上“ping”命令的原理确实是向对方主机发送 UDP
数据包,然后对方主机确认收到数据包,假如数据包是否到达的消
息及时反馈回来,那么网络确实是通的。例如,在默认状态下,一
次“ping”操作发送 4 个数据包。大伙儿能够看到,发送的数据包数
量是 4 包,收到的也是 4 包(因为对方主机收到后会发回一个确认
收到的数据包)。这充分说明了 UDP 协议是面向非连接的协议,没
有建立连接的过程。正因为 UDP 协议没有连接的过程,因此它的通
信成效高;但也正因为如此,它的可靠性不如 TCP 协议高。QQ 就
使用 UDP 发消息,因此有时会显现收不到消息的情形。
3.Socket 编程
Socket 接口是访问 Internet 使用得最广泛的方法。 假如你
有一台刚配好 TCP/IP 协议的主机,其 IP 地址是 202.120.127.201,
现在在另一台主机或同一台主机上执行 ftp 202.120.127.201,明
显无法建立连接。因"202.120.127.201" 这台主机没有运行 FTP 服
务软件。同样, 在另一台或同一台主机上运行扫瞄软件 如
Netscape,输入" ://202.120.127.201",也无法建立连接。现
在,假如在这台主机上运行一个 FTP 服务软件(该软件将打开一个
Socket, 并将其绑定到 21 端口),再在这台主机上运行一个 Web
服务软件(该软件将打开另一个 Socket,并将其绑定到 80 端口)。
如 此 , 在 另 一 台 主 机 或 同 一 台 主 机 上 执 行 ftp
202.120.127.201,FTP 客户软件将通过 21 端口来呼叫主机上由 FTP
服务软件提供的 Socket,与其建立连接并对话。而在 netscape 中输
入" ://202.120.127.201"时,将通过 80 端口来呼叫主机上由
Web 服务软件提供的 Socket,与其建 立连接并对话。
在 Internet 上有专门多如此的主机,这些主机一样运行了多个
服务软件,同时提供几种服务。每种服务都打开一个 Socket,并绑
定到一个端口上,不同的端口对应于不同的服务。Socket 正如其英
文原意那样,象一个多孔插座。一台主机犹如布满各种插座的房间,
每个插座有一个编号,有的插座提供 220 伏交流电, 有的提供 110
伏交流电,有的则提供有线电视节目。 客户软件将插头插到不同编
号的插座,就能够得到不同的服务。
在 Java 中所谓 Socket 通常也称作"套接字",用于描述 IP 地址
和端口,是一个通信链的句柄。应用程序通常通过"套接字"向网络
发 出 要 求 或 者 应 答 网 络 要 求 。 以 J2SDK-1.3 为 例 , Socket 和
ServerSocket 类库位于 java.net 包中。ServerSocket 用于服务器
端,Socket 是建立网络连接时使用的。在连接成功时,应用程序两
端都会产生一个 Socket 实例,操作那个实例,完成所需的会话。关
于一个网络连接来说,套接字是平等的,并没有差别,不因为在服
务 器 端 或 在 客 户 端 而 产 生 不 同 级 别 。 不 管 是 Socket 依 旧
ServerSocket 它们的工作差不多上通过 SocketImpl 类及其子类完成
的。
重 要 的 Socket API : java.net.Socket 继 承 于
java.lang.Object,有八个构造器,其方法并不多,下面介绍使用
最频繁的三个方法,其它方法能够参见 JDK-1.3 文档。
Accept 方法用于产生"堵塞",直到同意到一个连接,同时返回
一个客户端的 Socket 对象实例。"堵塞"是一个术语,它使程序运行
临时"停留"在那个地点,直到一个会话产生,然后程序连续;通
常"堵塞"是由循环产生的。
getInputStream 方 法 获 得 网 络 连 接 输 入 , 同 时 返 回 一 个
InputStream 对象实例。
getOutputStream 方法连接的另一端将得到输入,同时返回一
个 OutputStream 对 象 实 例 。 注 意 : 其 中 getInputStream 和
getOutputStream 方法均可能会产生一个 IOException,它必须被捕
捉,因为它们返回的流对象,通常都会被另一个流对象使用。
服务器,使用 ServerSocket 监听指定的端口,端口能够随意指
定(由于 1024 以下的端口通常属于保留端口,在一些操作系统中不
能够随意使用,因此建议使用大于 1024 的端口),等待客户连接要
求,客户连接后,会话产生;在完成会话后,关闭连接。
客户端,使用 Socket 对网络上某一个服务器的某一个端口发出
连接要求,一旦连接成功,打开会话;会话完成后,关闭 Socket。
客户端不需要指定打开的端口,通常临时的、动态的分配一个 1024
以上的端口。
Socket 接口是 TCP/IP 网络的 API,Socket 接口定义了许多函数
或例程,程序员能够用它们来开发 TCP/IP 网络上的应用程序。要学
Internet 上的 TCP/IP 网络编程,必须明白得 Socket 接口。 Socket
接口设计者最先是将接口放在 Unix 操作系统里面的。假如了解 Unix
系统的输入和输出的话,就专门容易了解 Socket 了。网络的 Socket
数据传输是一种专门的 I/O,Socket 也是一种文件描述符。Socket
也具有一个类似于打开文件的函数调用 Socket(),该函数返回一个
整型的 Socket 描述符,随后的连接建立、数据传输等操作差不多上
通过该 Socket 实现的。
六.课程设计实现代码:

1. 服务器端的设计代码
服务器端需要完成三大功能,分别是与客户端建立连接、监听
客户端消息以及操作数据库。
Client.java
package udp;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;

/**
* 基于 UDP 的通信
* @author Administrator
*
*/
public class Server {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
//创建服务端的 DatagramSocket
DatagramSocket server = null;
try {
server = new DatagramSocket(8088);
//创建一个 100 字节的数组
byte[] recvBuf = new byte[100];
//创建数据报,将猎取的数据填满给定的数组
DatagramPacket recvPacket
= new DatagramPacket(recvBuf, recvBuf.length);

//监听 8088 端口的数据,并将发送过来的数据存入数据报


server.receive(recvPacket);

//返回数据报中储存的收到的字节的字节数组
String str
= new String(
recvPacket.getData()
,
0
,
recvPacket.getLength()
);
//数据报的 getLength()方法用于返回接收到的实际字节量
System.out.println("客户端说:"+str);

System.out.println("请输入要对客户端说的话!");
String message = scanner.nextLine();
byte[] sendBuf = message.getBytes();
/*
* 通过之前客户端发送过来的数据报我们还能够得知
* 对方的地址以及使用的端口
*/
InetAddress address
= recvPacket.getAddress();
int port = recvPacket.getPort();

DatagramPacket sendPacket
= new DatagramPacket(
sendBuf,
sendBuf.length,
address,
port
);
server.send(sendPacket);

} catch (Exception e) {

} finally{

}
}
}
2.客户端设计的代码
Server.java
package udp;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;

/**
* 基于 UDP 的通信
* @author Administrator
*
*/
public class Server {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
//创建服务端的 DatagramSocket
DatagramSocket server = null;
try {
server = new DatagramSocket(8088);
//创建一个 100 字节的数组
byte[] recvBuf = new byte[100];
//创建数据报,将猎取的数据填满给定的数组
DatagramPacket recvPacket
= new DatagramPacket(recvBuf, recvBuf.length);

//监听 8088 端口的数据,并将发送过来的数据存入数据报


server.receive(recvPacket);

//返回数据报中储存的收到的字节的字节数组
String str
= new String(
recvPacket.getData()
,
0
,
recvPacket.getLength()
);
//数据报的 getLength()方法用于返回接收到的实际字节

System.out.println("客户端说:"+str);

System.out.println("请输入要对客户端说的话!");
String message = scanner.nextLine();
byte[] sendBuf = message.getBytes();
/*
* 通过之前客户端发送过来的数据报我们还能够得知
* 对方的地址以及使用的端口
*/
InetAddress address
= recvPacket.getAddress();
int port = recvPacket.getPort();

DatagramPacket sendPacket
= new DatagramPacket(
sendBuf,
sendBuf.length,
address,
port
);
server.send(sendPacket);

} catch (Exception e) {

} finally{
}
}
}

七.课程设计总结:

本文通过采纳 Java 的 Socket 技术,开发了一个简单的网络数


据传输软件。在该系统中实现了网络数据传输的一些差不多功能,
能够满足大部门用户在组建局域网后最为其公司的内部交流工具之
用。
在完成本课程设计时,我曾经遇到了专门多的困难,既有专业
知识上的,也有心理因素上的。只是所幸的是,在面对这些困难的
时候,我没有退缩而是选择了激流勇进,最终在指导老师是在谈天
消息框的界面上过于简单。只是我相信我以后会将该设计的功能连
续增强,从而达到商业软件的标准。

八.参考文献:

[1] Java 编程思想[M],机械工业出版社,2007.6


[2] 30 天学通 Java 项目案例开发[M],电子工业出版社,2018.7
,2018.12
[3] Java TCP/IP Socket 编 程 ( 原 书 第 2 版 ) [M] , 机 械 工 业 出 版 社 ,
2018.1
[4] Java 程 序 设 计 : 一 种 跨 学 科 的 方 法 [M] , 清 华 大 学 出 版 社 ,
2018.5
[5] Java 程序设计教程 [M],机械工业出版社,2018.9
[6] Java 从入门到熟知 [M],清华大学出版社,2018.8
[7] Java 网络编程技术与实践[M],清华大学出版社,2018.8

You might also like