您的位置:首页 > 理论基础 > 计算机网络

java 网络编程

2012-09-15 18:28 288 查看
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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: