西安邮电大学Socket网络编程

上传人:新** 文档编号:456126617 上传时间:2023-01-27 格式:DOCX 页数:15 大小:202.16KB
返回 下载 相关 举报
西安邮电大学Socket网络编程_第1页
第1页 / 共15页
西安邮电大学Socket网络编程_第2页
第2页 / 共15页
西安邮电大学Socket网络编程_第3页
第3页 / 共15页
西安邮电大学Socket网络编程_第4页
第4页 / 共15页
西安邮电大学Socket网络编程_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《西安邮电大学Socket网络编程》由会员分享,可在线阅读,更多相关《西安邮电大学Socket网络编程(15页珍藏版)》请在金锄头文库上搜索。

1、高级 Internet实验报告题目:Socket 网络编程学生姓名 :班级:软件 1202 班学号:指导老师:王文浪成绩:西安邮电大学计算机学院2015年4月27日一、实验目的 熟悉 Socket网络编程 熟悉 CS 客户机模式 熟悉 ServerSocket编写服务端熟悉使用多 线程机制处理业务了解客户机之间通信方式二、实验内容及要求采用 CS 模式,通过客户机向服务器端发送消息;采用 Socket来实现客户机之间的网络通信;通过 ServerSocket创建服务端来处理接受客 户机请求;通过多线程方式来 处理客户机之间的通信请求;实现通信的界面窗口; 实验内容有发送私聊消息、向选中用户发送

2、文件、用户接受文件。三、实验过程1.首先学习了在 JAVA 语言中 TCP/IP 协议下的 Socket网络模式图如 1.1 所示图 1.1TCP/IP 协议下的 Socket 网络模式图由图 1.1 可以得到,Socket 通信的步 骤如下:(1)在服务器端创建一个 ServerSocket对象并且指定端口号。(2)运行 ServerSocket的 accept()方法,等候客户端的请求。(3)客户端创建一个 Socket 对象,指定计算机的地址和端口号,向服务器端发出连接请求。(4)服务器端接收到来自客 户端的请求后,创建 Socket 对象与客户端建立连接。(5)服务器端和客 户端分别建

3、立输入输出流进行数据传输 。(6)通信结束后,服务器端和客 户端分别关闭相应的 Socket 连接。(7)服务器端程序运行 结束后,调用 ServerSocket对象的 close()方法停止等待客 户端请求。由此可以看出,对于一个网 络通信程序来 说,需要编写服务器端和客 户端两个程序才能 够实现相互通信,为了实现一个服务端程序能够对多个客户进行服务,需要使用到多线程,在服务器端创建客户请求的监听线程,一旦客户发起请求连接,在服务器端创建用于服务的 Socket,利用改 Socket 完成与客 户的通信,即每个线程针对一个客户进行服务,数据传输结束后,终止运行该 Socket 通信的线程,继

4、续在服务器端指定的端口 进行监听。2.数据报的通信的 发送和接收 过程:应用程序的工作流程如下:1()首先要建立数据报通信的 Socket,我们可以通过创建一个DatagramSocket对象实现它,在Java中 DatagramSocket类有如下两种构造方法:public DatagramSocket() 构造一个数据 报 socket,并使其与本地主机任一可用的端口连接。若打不开 socket则抛出 SocketException异常。public DatagramSocket(int port) 构造一个数据 报,并使其与本地主机指定的端口 连接。若打不开 socket或 socket

5、无法与指定的端口连接则抛出 SocketException异常。2()创建一个数据 报文包,用来实现无连接的包传送服务。每个数据报文包用 DatagramPacket类创建,DatagramPacket对象封装了数据报包数据、包长度、目标地址和目 标端口。客户端要发送数据报文包,要调用 DatagramPacket类以如下形式的构造 创建DatagramPacket对象,将要发送的数据和包文目的地址信息放入 对象之中。DatagramPacket(byte bufferedarray,int length,InetAddress address,int port)即构造一个包长度为 lengt

6、h 的包传送到指定主机指定端口号上的数据 报文包,参数 length 必须小于等于 bufferedarry.length。DatagramPacket类提供了 4 个类获取信息:public byte getData() 返回一个字 节数组,包含收到或要发送的数据报中的数据。public int getLength() 返回发送或接收到的数据的 长度。public InetAddress getAddress() 返回一个 发送或接收此数据报包文的机器的 IP 地址。public int getPort() 返回发送或接收数据 报的远程主机的端口号。3()创建完 DatagramSocket

7、和 DatagramPacket对象,就可以发送数据报文包了。发送是通过调用 DatagramSocket对象的 send方法实现,它需要以 DatagramPacket对象为参数,将刚才封装进DatagramPacket对象中的数据 组成数据报发出。4()当然,我们也可以接收数据 报文包。为了接收从服 务器返回的结果数据报文包,我们需要创建一个新的 DatagramPacket对象,这就需要用到 DatagramPacket的另一种构造方式 DatagramPacket (byte bufferedarray,int length),即只需指明存放接收的数据报的缓冲区和长度。调用 Datag

8、ramSocket对象的 receive()方法完成接收数据报的工作,此时需要将上面 创建的 DatagramPacket对象作为参数,该方法会一直阻塞直到收到一个数据 报文包,此时 DatagramPacket的缓冲区中包含的就是接收到的数据,数据 报文包中也包含 发送者的 IP 地址,发送者机器上的端口号等信息。5()处理接收内的数据,获取服务结果。6()当通信完成后,可以使用 DatagramSocket对象的 close()方法关闭数据报通信 Socket。当然,Java会自动关闭 Socket,释放DatagramSocket和 DatagramPacket所占用的 资源。但是作为一

9、种良好的习惯,还是要显式地予以关 闭。3.DatagramSocket 类详解Java使用 DatagramSocket代表 UDP 协议的 Socket,DatagramSocket本身只是 码头,不能产生 IO 流,它的唯一作用就是接收和发送数据报,Java使用 DatagramPacket来代表数据 报,DatagramSocket接收和发送的数据都是通 过 DatagramPacket对象完成的。DatagramSocket():创建一个 DatagramSocket实例,并将该对象绑定到本机默 认 IP 地址、本机所有可用端口中随机 选择的某个端口。DatagramSocket(in

10、t prot):创建一个 DatagramSocket实例,并将该对象绑定到本机默 认 IP 地址、指定端口。DatagramSocket(int port, InetAddress laddr):创建一个DatagramSocket实例,并将该对象绑定到指定 IP 地址、指定端口。通过上面三个构造器中的任意一个构造器即可 创建一个DatagramSocket实例,通常在创建服务器时,创建指定端口的DatagramSocket实例-这样保证其他客户端可以将数据 发送到该服务器。一旦得到了 DatagramSocket实例之后,就可以通过如下两个方法来接收和 发送数据。receive(Datag

11、ramPacket p):从该 DatagramSocket中接收数据 报。send(DatagramPacket p):以该 DatagramSocket对象向外发送数据报。从上面两个方法可以看出,使用 DatagramSocket发送数据报时,DatagramSocket并不知道将 该数据报发送到哪里,而是由DatagramPacket自身决定数据 报的目的地。就像码头并不知道每个集装箱的目的地,码头只是将这些集装箱 发送出去,而集装箱本身包含了该集装箱的目的地。DatagramPacket的构造器:DatagramPacket(byte buf,int length):以一个空数组来创建

12、DatagramPacket对象,该对象的作用是接收 DatagramSocket中的数据。DatagramPacket(byte buf, int length, InetAddress addr, int port):以一个包含数据的数 组来创建 DatagramPacket对象,创建该DatagramPacket对象时还指定了 IP 地址和端口 -这就决定了 该数据报的目的地。DatagramPacket(byte buf, int offset, int length):以一个空数组来创建 DatagramPacket对象,并指定接收到的数据放入 buf 数组中时从offset 开始,

13、最多放 length 个字节。DatagramPacket(byte buf, int offset, int length, InetAddressaddress, int port):创建一个用于 发送的 DatagramPacket对象,指定发送 buf 数组中从 offset 开始,总共 length 个字节。当 Client/Server 程序使用 UDP 协议时,实际上并没有明 显的服务器端和客 户端,因为两方都需要先建立一个 DatagramSocket对象,用来接收或 发送数据报,然后使用 DatagramPacket对象作为传输数据的载体。通常固定 IP 地址、固定端口的 DatagramSocket对象所在的程序被称为服务器,因为该 DatagramSocket可以主动接收客户端数据。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 幼儿/小学教育 > 幼儿教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号