只要是网络传输,必须有socket 。
数据一定要封装到数据包中,数据包中包括目的地址、端口、数据等信息。
客户端
创建Socket连接服务端(指定ip地址,端口号)通过ip地址找对应的服务器
调用Socket的getInputStream()和getOutputStream()方法获取和服务端相连的IO流
输入流可以读取服务端输出流写出的数据
输出流可以写出数据到服务端的输入流
服务端
创建ServerSocket(需要指定端口号)
调用ServerSocket的accept()方法接收一个客户端请求,得到一个Socket
调用Socket的getInputStream()和getOutputStream()方法获取和客户端相连的IO流
输入流可以读取客户端输出流写出的数据
输出流可以写出数据到客户端的输入流
因为数据包中包含的信息较多,为了操作这些信息方便,也一样会将其封装成对象。这个数据包对象就是:DatagramPacket.通过这 个对象中的方法,就可以获取到数据包中的各种信息。
DatagramSocket具备发送和接受功能,在进行udp传输时,需要明确一个是发送端,一个是接收端。
udp的发送端:
①:建立udp的socket服务,创建对象时如果没有明确端口,系统会自动分配一个未被使用的端口。
②:明确要发送的具体数据。
③:将数据封装成了数据包。
④:用socket服务的send方法将数据包发送出去。
⑤:关闭资源。
udp的接收端:
①:创建udp的socket服务,必须要明确一个端口,作用在于,只有发送到这个端口的数据才是这个接收端可以处理的数据。
②:定义数据包,用于存储接收到数据。
③:通过socket服务的接收方法将收到的数据存储到数据包中。
④:通过数据包的方法获取数据包中的具体数据内容,比如ip、端口、数据等等。
⑤:关闭资源。
InetAddress getByName(String host):在给定主机名的情况下确定主机的ip地址。
InetAddress getLocalHost():返回本地主机。
InetAddress[] getAllByName(String host)
ip.getHostAddress(),
ip.getHostName()
三、TCP网络编程
Java 的基于套接字编程分为服务端编程和客户端编程:
服务器编程:
1、调用ServerSocket(int port) 创建一个服务器套接字,并绑定到指定端口上。
2、调用accept(),监听连接请求,如果客户端请求连接,并接收连接,返回客户端套接字Scoket。
3、调用Socket 类的getOutputStream 和getInputStream 获取网络输出和输入流,开始网络数据的发送和接收。
4、关闭通信套接字。
客户端编程:
1、调用Socket()创建一个流套接字,并请求连接到服务器。
2、调用Socket 类的getOutputStream 和getInputStream 获取网络输出和输入流,开始网络数据的发送和接收。
3、关闭通信套接字。
练习:模拟一个文件上传的C/S 程序。即可以多个用户同时向客户端上传mp3格式文件。
分析:在多个客户端同时连接服务器,并对服务器进行上传文件操作时,则需要使用多线程,否则会出现局限性:当一个客户 端连接服务器时,其他客户端则不能连接上
问:如何定义线程?
明确每个客户端要在服务端执行的代码,将该代码存入run方法中。如:
服务器:
1、创建服务器Socket 。
2、接收客户端连接。
3、接收客户端上传的文件。
4、接收完成,返回信息。
5、关闭资源。
上面5个步骤中,3、4则是客户端要在服务端执行的代码,我们则将该代码存入run()方法中。
四、URL
URL(Uniform Resurse Locator ,统一资源定位器),用来表示从英特网上得到资源位置和访问位置这些资源的方法。协议 名://资源名。
如:http://www.cnblogs.com/jbelial/
其中:协议名是http 协议,主机名是www.cnblogs.com,端口默认80,文件路径名是/jbelial/。
1、URL类
URL 类代表了一个同一资源定位符,它是指向互联网资源的指针。
URL 类的构造方法如下:
> URL(String spec ) :由一个表示URL 地址的字符串构造一个URL对象。
> URL(String protocol , String host , int port , String file) :根据指定protocol、host、port号和file创建URL 对象。
常用方法:
> InputStream openStream() :打开一个连接到该URL 的InputStream 的对象,通过对象,可以URL 中读取Web 页面内容。
> URLConnection openConnection() :创建并返回一个 URLConnection 对象,它表示到URL所引用的远程对象的连接。
> Object getContent() : 获取此URL 的内容。
> String getFile() :获取次URL的文件名。
> String getHost(): 获取次URL的主机名
> String getPath(): 获取次URL的路径部分。
> String getProtocol(): 获取次URL的协议名称
> String getQuery(): 获取次URL 的查询。
2、URLConnection 类
抽象类 URLConnection 是所有类的超类,它代表应用程序和 URL 之间的通信链接。此类的实例可用于读取和写入此 URL 引用的 资源。