java 网络编程

来源:互联网 发布:淘宝通过 拍摄脸部 编辑:程序博客网 时间:2024/06/16 04:03
java 网络编程

网络体系结构:国际标准化组织ISO于l978年提出“开放系统互连参考模型”,
即著名的OSI(Open System Interconnection)模型。
该模型把计算
机网络分成物理层、数据链路层、网络层、传输层、会话层、表示层、应用层等七层。 

网络是信息传输、接收、共享的虚拟平台,通过它把各个点、面、体的信息联系到一起,从而实现这些资源的共享。



java可以通过TCP协议和UDP协议实现与网络的交互。

通信协议:计算机网络中实现通信的约定,它对速率、传输代码、代码结构、传输控制步骤、出错控制等制定标准。


UDP协议:UDP是一种无连接的协议,每个数据报都是一个独立的信息,包
括完整的源或目的地址,它在网络上以任何可能的路径传往目的地,因此

能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。

为什么使用UDP:在网络质量令人不十分满意的环境下,UDP协议数据包丢
失会比较严重。但是由于UDP属于连接性协议,因此具有资源消耗小,处理
速度快的优点。


在java中如何使用UDP:
使用位于JDK中java.net包下的DatagramSocket和DatagramPacket类,可以非常方便地控制用户数据报文。

DatagramSocket类:创建接收和发送UDP的Socket实例

1、DatagramSocket():创建实例。通常用于客户端编程,它并没
有特定监听的端口,仅仅使用一个临时的。【注意:在创建
DatagramSocket类实例时,如果端口已经被使用,会产生一个
SocketException的异常抛出,并导致程序非法终止,这个异常应该注意捕
获】 
2、DatagramSocket(int port):创建实例,并固定监听Port端口
的报文。
3、DatagramSocket(int port, InetAddress localAddr):这是
个非常有用的构建器,当一台机器拥有多于一个IP地址的时候,由它创建
的实例仅仅接收来自LocalAddr的报文。


UDP发送端:


建立udpsocket服务端点。该端点建立,系统会随机分配一个端口。如果不
想随机配置,可以手动指定。
DatagramSocket ds = new DatagramSocket();

将数据进行packet包的封装,必须要指定目的地地址和端口。
byte[] buf = "wo shi shu ju".getBytes();
DatagramPacket dp =new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.254"),9002);

通过socket服务的send方法将该包发出。
ds.send(dp);
将socket服务关闭。主要是关闭资源。
ds.close();




UDP接收端:


建立udp的socket服务。要监听一个端口。
DatagramSocket ds = new DatagramSocket(9002);

定义一个缓冲区,将该缓冲区封装到packet包中。
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf,buf.length);

通过socket的receive方法将数据存入数据包中。
ds.receive(dp);

通过数据包dp的方法getData()、getAddress()、getPort()等方法获取包中的指定信息。
最后关闭socket————ds.close();


在java中如何使用TCP:

编写TCP网络服务程序,首先要用到java.net.ServerSocket类用以创建服务器Socket

构造方法:
ServerSocket(int port):创建绑定到特定端口的服务器套接字

ServerSocket(int port, int backlog):利用指定的backlog(服务器忙时保持连接请求的等待客户数量),
创建服务器套接字并将其绑定到指定的本
地端口号。

ServerSocket(int port, int backlog, InetAddress bindAddr):
使用指
定的端口、侦听 backlog 和要绑定到的本地 IP 地址创建服务器。





TCP客户端:

创建Socket
Socket connection =new Socket(127.0.0.1,9009);
获得I/O流
ObjectInputStream input=new ObjectInputStream(connection.getInputStream());
对I/O流进行读写操作
ObjectOutputStream output=new ObjectOutputStream(connection.getOutputStream());
关闭I/O流
output.close();
input.close();
关闭Socket
connection.close();




TCP服务端:


创建一个ServerSocket
ServerSocket server=new ServerSocket(port);
从ServerSocket接受客户连接请求
Socket s =server.accept();


创建一个服务线程处理新的连接
在服务线程中,从socket中获得I/O流
ObjectInputStream in=new ObjectInputStream(s.getInputStream());
对I/O流进行读写操作,完成与客户的交互
ObjectOutputStream out=new ObjectOutputStream(s.getOutputStream());


关闭I/O流
out.close();
in.close();
关闭Socket
s.close();



URL类的使用
URL常用的2个构造方法:
Public URL(String str)
Public URL(URL context,String str)

获得URL对象后,常常调用一下方法:
String getFile():获取此URL的资源名。
String getHost():获取此URL的主机名。
String getPath():获取此URl的路径部分。
String getPort():获取此URL的端口号。
String getProtocol():获取此URL的协议名称。
String getQuery():获取此URL的查询字符串部分。
URLConnection openConnection():返回一个URLConnection对象,它表示到URL所引用的远程对象的连接。
InputStream openStream():打开与此URL的连接,并返回一个用于读取该URL资源的InputStream。

原创粉丝点击