网络通信
学习目标
了解网络通信的基础知识
掌握TCP Socket通信的原理及编程
掌握UDP Socket通信的原理及编程
1、网络编程的基础知识
网络编程初步
近年来,因特网得到了广泛的发展和应用
Java语言的产生与推广,也与网络息息相关
利用Java语言强大的功能,将使得网络编程变得十分简单
网络传输协议
接入网络的计算机都遵循同样的协议,这就是TCP/IP协议
TCP/IP协议将网络分成多层
1、网络编程的基础知识
网络传输的层次结构
常用的网络层次有4层,分别是连
接层、网络层、传输层和应用层
我们编写的网络程序通常处在应用
层,在这一层,不需要追究有关网
络或网卡的技术细节,就可以编写
出很好的程序
1、网络编程的基础知识
IP地址
为了区分网络上的主机,每台主机都分配一个专门的地址称为IP地址
端口
用来标识计算机上正在运行的进程(程序),使得数据能正确地传送
给应用程序
TCP协议
传输控制协议,提供两台计算机之间的可靠的无差错数据传输,但建
立连接需要时间,差错控制开销大
UDP协议
无连接通信协议,传输不可靠,但差错开销较小,不需要建立连接,
传输大小控制的64KB以下
2、URL类
在包中的URL类是对统一资源定位符的抽象。
一个URL对象通常包含最基本的三部分信息:协议、地址、资源
URL的构造方法:
public URL(String spec)throws MalformedURLException
public URL(String protocol,String host,String file)throws
Malformed-URLExpection
2、URL类
3、显示URL资源中的HTML文件
使用包中的JEditorPane容器可以解释执行HTML文件。
JEditorPane类的构造方法:
public JEditorPane()
public JEditorPane(URL initialPage)throws IOException
public JEditorPane(String url)throws IOException
JEditorPane对象调用以下方法可以显示新的URL中的资源。
public void setPage(URL page)throws IOException
4、处理超链接
当JEditorPane对象调用setEditor方法将编辑属性设为false时,不
仅可以显示网页的运行效果,而且用户单击网页中的超链接还可以使
JEditorPane对象触发HyperlinkEvent事件。程序处理
HyperlinkEvent事件,来显示新的URL资源。
JEditorPane对象调用
addHyperlinkListener(HyperlinkListener listener)方法获得监视
器。监视器需要实现HyperlinkListener接口,该接口中的方法如下:
void hyperlinkUpdate(HyperlinkEvent e)
类
在包中,IP地址由一个称为InetAddress的类描述。
该类提供三个用来获得InetAddress实例的静态方法:
getLocalHost()返回一个本地主机的IP地址
getByName(String host)返回对应指定主机的IP地址
getAllByName(String host)对某个有多个IP地址的主机可用于得到
一个IP地址数组
还可以使用的方法:
getAddress()获得一个用字节数组形式表示的IP地址
getHostName()获得对应于某个IP地址的主机名
6、基于TCP的Socket编程
Socket类的网络编程特点
Socket类处于应用层,无需考虑技术细节
利用Socket类进行网络通讯的基本步骤:
创建服务器端,等待连接
创建客户端,向服务器端发送请求
在客户端和服务器端建立双向连接通道
服务器和客户端都可以通过这条通道向对方发送消息,二者的地位是相
等的
6、基于TCP的Socket编程
Socket类的网络编程特点
在网络程序中,存在很多等待过程
•服务器端等待客户端的连接
•连接上的两端相互等待对方发送数据
程序在等待时不能响应用户的动作,使得单线程网络程序往往处于类似
死机的状态
因此,网络程序一般都是多线程程序
•后台线程等待网络消息
•前台线程处理用户动作
6、基于TCP的Socket编程
Socket类的编程步骤
建立客户端:
(1)创建Socket对象
public Socket(String host,int port)
public Socket(InetAddress address,String host,int port)
(2)利用Socket类提供的getInputStream()方法或getOutputStream()
方法来获得服务器发来的信息或向服务器发送信息
InputStream input=();
OutputStream output=();
(3)处理输入输出流,使用read()方法读去数据,write()方法写入数据
(4)关闭输入流或输出流,Socket对象。
6、基于TCP的Socket编程
Socket类的编程步骤
建立服务器端:
(1)创建一个ServerSocket对象
public ServerSocket(int port)
public ServerSocket(int port,int maxcount)
public ServerSocket(int port,int maxcount,InetAddress ip)
(2)ServerSocket对象调用accept()方法等待客户端的服务请求
Scoket connect=();
(3)利用ServerSocket类提供的getInputStream()方法或getOutputStream()方法
来获得客户端发来的信息或向客户端发送信息
(4)处理输入输出流,使用read()方法读去数据,write()方法写入数据
(5)关闭输入流或输出流,ServerSocket对象
7、基于UDP的Socket编程
UDP通信的2大步骤:
1、发送数据报 2、接收数据报
发送数据报的步骤:
(1)创建DatagramPacket对象
DatagramPacket(byte buf[],int length)
DatagramPacket(byte buf[],int length,InetAddress address,int
port)
DatagramPacket(byte buf[],int offset,int length)
DatagramPacket(byte buf[],int offset,int length,InetAddress
address,int port)
7、基于UDP的Socket编程
(2)创建一个DatagramSocket对象。
DatagramSocket()
DatagramSocket(int port)
DatagramSocket(int port,InetAddress ip)
(3)调用DatagramSocket对象的send()方法发送数据报,send()方法
以DatagramPacket对象为参数
(DatagramPacketObj);
7、基于UDP的Socket编程
接收数据报的步骤:
(1)创建DatagramPacket对象
(2)创建一个DatagramSocket对象
(3)调用DatagramSocket对象的receive()方法接收数据,receive
()方法以DatagramPacket对象为参数
(4)处理接收的数据。调用DatagramPacket对象的getData()方法来
获得数据。
总结
掌握URL类和Inetaddress类的使用
了解TCP,UDP的区别
掌握使用Socket编程的步骤