基本网络编程

上传人:今*** 文档编号:112590853 上传时间:2019-11-06 格式:PPT 页数:50 大小:926KB
返回 下载 相关 举报
基本网络编程_第1页
第1页 / 共50页
基本网络编程_第2页
第2页 / 共50页
基本网络编程_第3页
第3页 / 共50页
基本网络编程_第4页
第4页 / 共50页
基本网络编程_第5页
第5页 / 共50页
点击查看更多>>
资源描述

《基本网络编程》由会员分享,可在线阅读,更多相关《基本网络编程(50页珍藏版)》请在金锄头文库上搜索。

1、Java基本网络编程,基于Socket的基本网络程序(1v1) 利用多线程实现多客户端连接(1vN) 传输对象及任何数据 聊天程序设计架构 Socket扩展应用示例:发邮件,Socket编程,服务器:提供信息资源的计算机或服务器。 客户机:请求信息资源的计算机或程序。 传输协议: TCP (Transmission Control Protocol,传输控制协议):“面向连接 ”,可靠的、基于字节流的传输层(Transport layer)通信协议 。如:打电话 面向连接服务要经过三个阶段:数据传数前,先建立连接,连接建立后再传输数据,数据传送完后,释放连接。面向连接服务,可确保数据传送的次序

2、和传输的可靠性。 UDP(User Datagram Protocol ,用户数据包协议):“面向非连接”,在正式通信前不必与对方先建立连接,不管对方状态就直接发送。如:写信 无连接服务的特点是:无连接服务只有传输数据阶段。消除了除数据通信外的其它开销。 IP( Internet Protocol ):计算机网络相互连接进行通信而设计的协议。互联网地址或Internet地址。是用来唯一标识互联网上计算机的逻辑地址。 相当于电话号码。,Socke编程就是指网络编程。,OSI七层协议模型,InetAddress,InetAddress代表了一个网络目标地址对象,封装了主机名和数字类型的地址信息。,

3、InetAddress ia=InetAddress.getLocalHost(); /获得本机IP地址情况 System.out.println(“主机名:“+ ia.getHostName(); /得到主机名 System.out.println(“主机地址:“+ ia.getHostAddress(); /得到主机地址 InetAddress ia2=InetAddress.getByName(“ Lily-THINK “); /通过主机名获得信息 System.out.println(“主机地址:“+ ia2.getHostAddress(); InetAddress ia4=Inet

4、Address.getByName(“); /根据域名到DNS查询Ip System.out.println(“163 IP:“+ia4.getHostAddress();,网络应用工作流程,网络应用工作流程,我们用写信来举例: IP确定位置(相当于寄信的地址),端口确定该位置上的服务(具体是寄给哪个人的信)。 IP可以定位到具体的计算机,端口代表计算机上提供的具体服务。 IP与端口的组合得出一个套接字(将应用程序和端口连接起来),达到完全分辨网络上运行的程序的作用。,TCP套接字,为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCPIP协议交互提供了称为套接字(Socket

5、)的接口。 Socket可以看作是通信连接两端的收发器。,Socket可以看成在两个程序进行通讯连接中的一个端点。,Socket所要完成的通信就是基于连接的通信,建立连接所需的程序分别运行在客户端和服务器端。 套接字连接就是客户端的套接字对象和服务器端的套接字对象通过输入/输出流连接在一起。,套接字,Socket是网络上运行的程序之间双向通信链路的端点。,TCP套接字,Socket部分 通过将这3个参数结合起来,与一个Socket绑定,应用层就可以和传输层通过套接字接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。,在Java中,套接字(通信端点)被抽象为类,我们只需要创

6、建Socket类的对象,就可以使用套接字。 Socket中有输入输出流对象,同时能实现服务器之间的数据传输。,一个程序(Program B )将一段信息写入Socket中,该Socket将这段信息发送给另外一个Socket(Program A)中,使这段信息能传送到其他程序中。,Socket工作步骤,建立连接 1.在服务器端通过指定一个用来等待的连接的端口号创建一个 ServerSocket实例. 2.在客户端通过主机和端口号创建一个 socket实例,连到服务器上. 3.ServerSocket类的accept方法使服务器处于阻塞状态,等待用户请求 数据通信 建立socket连接后,还应该建

7、立输入输出数据流,客户程序可以向Socket写入请求,服务器程序处理请求,并把处理结果通过Socket返回给客户端,完成通过虚拟通道的数据通信; 拆除连接 通信结束,将所建立的虚拟连接全部拆除。,注意: 在服务器端指定的端口的时候,要注意该端口是否可用,是否已经被占用。 11023已经被系统占用了,应使用102465535之间的端口号,避免发生冲突。,常用网络务端口 :,ServerSocket和Socket创建,ServerSocket代表服务器端套接字。 Socket代表客户端套接字。,ServerSocket负责监听TCP连接请求,并为每个连接创建新的Socket实例。就是说,服务端需要

8、同时处理ServerSocket和Socket,而客户端只需要使用Socket实例。,创建ServerSocket(服务端套接字): ServerSocket(int port) 创建绑定到特定端口的服务器套接字。 ServerSocket(int port, int backlog)创建绑定到特定端口的服务器套接字,并指定最大连接数。,创建Socket(客户端套接字): Socket(InetAddress address, int port) 创建一个流套接字并将其连接到指定 IP 地址的指定端口号。 Socket(String host, int port) 创建一个流套接字并将其连接到

9、指定主机上的指定端口号。,发送和接受流式数据,为了能随时监听客户端的请求,可以使用accept()方法用来接收客户机程序的连接请求,返回值是一个Socket类型的对象。程序运行到这里处于等待状态。,Socket对象创建成功后,就可以在客户机与服务器之间建立一个连接,并通过这个连接在两个端口之间传送数据。 OutputStream os = socket.getOutputStream() 返回此套接字的输出流,发送数据。 InputStream is = socket.getInputStream() 返回此套接字的输入流,接收数据。,下面我们创建一个“回声”的例子: 客户端向服务器端发送数据

10、,然后服务器端返回客户端发送的数据。,每一个Socket存在时都占用一定的资源,在通信完成后,应该断开服务器端或客户端上运行的应用程序,即断开其虚拟连接并释放所占用的系统资源。close()方法就能关闭当前套接字,释放资源。,补充内容输入输出流,流操作,在程序中所有的数据都是以流(Stream)的方法进行传输和保存的。 程序需要数据的时候使用输入流; 程序保存数据时使用输出流; 水流 Java把所有传统的流类型(类或抽象类)都放在java.io包中,用以实现输入输出功能。 输入和输出是一个相对的概念,我们一般站在程序的角度来分析和处理问题。 读进来 输入 写出去 输出,流的分类,从不同角度分类

11、: 按流的方向的不同可以分为输入流和输出流; 按处理数据的单位不同分为字节流和字符流; 按功能的不同可分为节点流和处理流; 所有流都继承与以下四种抽象流类型:,字符流与字节流的区别在于前者是基于字符的操作,而后者则基于字节操作。 Java里字符由两个字节组成.,操作步骤,File类本身是与文件操作有关,但是如果要想操作内容则必须使用字节流或字符流完成,但是不管是使用何种的输入输出流,其基本的操作原理是一样的(以文件流为准) 1、 使用File类找到一个文件对象 2、 通过字节流或字符流的子类进行对象的实例化 3、 进行读或写的操作 4、 关闭输入/输出 由于流的操作属于资源操作,所以在操作的最

12、后一定要关闭以释放资源。 操作流有以下几个: 字节流:OutputStream、InputStream 字符流:Writer、Reader,字节流,字节流主要是操作byte的类型数据: 字节输出流:OutputStream 字节输入流:InputStream,OutputStream,void flush() throws IOException:刷新缓冲区 abstract void close() throws IOException:关闭输出流 void write(int c) throws IOException:将一个字节写入到输出流中。 void write(byte b) th

13、rows IOException:将一个byte数组写出。 void write(byte b,int off,int len) throws IOException:将字节数组从off位置开始,长度为len的字节写入到输出流中。 以其子类FileOutputStream来实例化OutputStream对象 FileOutputStream(File/String file) throws FileNotFoundException创建一个向指定 File 对象表示的文件中写入数据的文件输出流。 FileOutputStream(File/String file, boolean append

14、) throws FileNotFoundException创建一个向指定 File 对象表示的文件中写入数据的文件输出流,OutputStream例子,public static void main(String args) throws Exception OutputStream out = new FileOutputStream(“test.txt“); out.write(“hello“.getBytes(); out.flush(); out.close(); public static void main(String args) throws Exception Output

15、Stream out = new FileOutputStream(“test.txt“,true); byte bys = “hello“.getBytes(); for (int i = 0; i bys.length; i+) out.write(bysi);/每次只写入一个内容 out.flush(); out.close(); ,OutputStreamTest.java,InputStream,int available() throws IOException:文件大小 abstract void close() throws IOException:关闭流 int read()

16、 throws IOException:从输入流中读取单个字节。 int read(byte b) throws IOException:从输入流中读取最多b.length个字节的数据,并将其存储在字节数组b中,返回实际读取的字节。 直到read(byte b)函数返回-1表示输入流的结束。 以其子类FileInputStream来实例化InputStream对象 FileInputStream(File/String file) throws FileNotFoundException 创建一个向指定 File 对象表示的文件中写入数据的文件输出流。,InputStream例子,public static void main(String args) String path = “pathName“; InputStream input = null; input = new FileInputStream(new File(path); / 定义缓冲区 byt

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

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