码迷,mamicode.com
首页 > 编程语言 > 详细

Java—网络技术

时间:2016-05-11 13:33:21      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:

1  TCP Sockets基础

        Sockets是一个编程抽象概念,它是网络上与另一个应用程序通信连接的句柄。Sockets编程将用户代码与TCP/IP协议堆栈的底层实现隔离开,允许用户灵活地实现自己的编程。

基于TCP协议的TCP Sockets需要四个方面的数据:

(1) 本地系统的IP地址。

(2) 本地应用程序正在使用的TCP端口号。

(3) 通信的远程系统的IP地址。

(4) 通信的远程系统响应的TCP端口号。

        TCP Sockets的应用模型通常是客户/服务器模型,一个服务器在一个特定端口等待远程计算机请求资源,给予响应。客户程序绑定到这个端口,建立一个可靠连接来用于通信。

面向连接的操作使用TCP协议,在这个模式下的Socket必须在发送数据之前与目的地的Socket取得一个连接。连接建立后,Socket就可以使用一个流接口:打开—读—写—关闭。所有发送

信息都会在另一端以同样的顺序被接收。面向连接的操作比无连接的操作效率低,但是数据的安全性更高。由于Socket使用是双方的,所以在客户端和服务器端的使用稍有不同。  

(1) 客户端请求Socket的步骤如下:

① 建立客户端Socket连接;

② 得到Socket的读和写的流;

③ 利用流;

④ 关闭流;

⑤ 关闭Socket。

使用一个服务器端的Socket请求比使用一个客户端Socket请求要麻烦一些。服务器并不是主动地建立连接。相反地,服务器被动地监听客户端的连接请示,然后给它们服务。

(2) 服务器端Socket要完成以下的基本的步骤:

① 建立一个服务器Socket并开始监听;

② 使用accept()方法取得新的连接;

③ 建立输入和输出流;

④ 在已有的协议上产生会话;

⑤ 关闭客户端流和Socket;

⑥ 回到②或者转到⑦;

⑦ 关闭服务器Socket。

1.1  InetAddress类

         InetAddress对象表示一个Internet主机地址。这个主机地址可以通过名字和IP地址来标识。名字即主机名,例如本机名字为snowing,为字符串类型;IP地址为192.100.100.43,为四字节的数字,书写形式为a.b.c.d。InetAddress类的几个常用方法如下:

public static InetAddress getByName(String host) throws UnknownHostException             通过名字可以得到主机的IP地址。

public String getHostAddress()                                                                                     返回IP地址的字符串格式。

public String getHostName()                                                                                         返回IP地址的主机名。

public static InetAddress getLocalHost() throws UnknownHostException                            以InetAddress类封装的格式返回本机地址。

public String toString()                                                                                                 转换成字符串格式。

例:InetAddress对象应用的测试。获取本机地址并转换成字符串输出,输出本地主机名和IP地址。

技术分享
 1 import java.net.*;
 2 public class FindHost 
 3 {
 4     public static void main(String[] args) 
 5     {
 6         try
 7         {
 8     InetAddress h = InetAddress.getLocalHost();
 9     System.out.println("toString():" + h.toString());
10     System.out.println("getHostName():"  +h.getHostName());
11     System.out.println("getHostAddress():"+h.getHostAddress());
12                                  }
13         catch(UnknownHostException e)
14         {
15           System.out.println(e.getMessage());
16          }
17      }
18 }
View Code

1.2  Socket类

       Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而

已,是对TCP/IP协议的抽象,从而形成了我们知道的一些最基本的函数接口。

Socket类用来实现客户端的Socket。常用的构造方法有以下三种:

 public Socket()                                                                      创建一个无连接的Socket。

 public Socket(InetAddress address, int port)                           创建流式Socket,将它连接到InetdAdress类指明的主机和port端口上。

 public Socket(String host, int port)                                         创建流式Socket并将它连接到特定host的特定port端口上。

 1.2.1  建立客户端程序,访问网址http://www.xjtu.edu.cn,返回网址的首页写入文件xjtu.html。

1. 程序建立的步骤

(1) 建立到  http://www.xjtu.edu.cn且端口为80的Socket连接。

        Socket clientSocket = new Socket("www.xjtu.edu.cn", 80);

(2) 初始化字节流。连接建立后的数据传输通过数据输入输出流实现,写文件又通过文件输入输出流来实现。各种流对象的初始化如下:

DataOutputStream outbound = new DataOutputStream(clientSocket.getOutputStream());

DataInputStream inbound = new DataInputStream(clientSocket.getInputStream());

InputStreamReader inS = new InputStreamReader(inbound);

File f = new File("xjtu.html");

FileOutputStream fOut = new FileOutputStream(f);

PrintStream p = new PrintStream(fOut);

(3) 发送请求。

outbound.writeBytes("GET / HTTP/1.0\r\n\r\n");

(4) 返回数据后,循环写入文件。

int c;

while((c = inS.read()) != -1)

p.print((char)c);

(5) 关闭流。

inS.close();

outbound.close();

inbound.close();

clientSocket.close();

 

Java—网络技术

标签:

原文地址:http://www.cnblogs.com/feitiannengdou/p/5478534.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!