第3章 网络特性 读书笔记

3.1        连接服务器

命令格式: telnet 主机 端口号

过程描述:

服务器软件正在远程计算机上连续不断地运行,以等待想要与某端口进行通信的网络信息.当远程计算机上的操作系统接收到一个含有连接到此端口的请求的网络数据包时,它便唤醒正在收听网络信息的服务器,并且建立连接.该连接将保持下去,直到通信的某一方将它中断为止.

 

3.2        实现服务器

代码步骤:

1.       建立负责监控某端口的服务器套接字

ServerSocket s = new ServerSocket(端口号);

2.       无期限的等待,直到客户机连接到该端口为止

Socket incoming = s.accept();

3.       获得套接字的输入阅读程序和输出写程序

BufferedReader in = new BufferedReader

(new InputStreamReader(incoming.getInputStream()));

 

PrintWriter out = new PrintWriter

(incoming.getOutputStream(),true /*autoFlush*/);

4.       具体的读写方法

boolean done = true;

while(!done){

String line = in.readLine();

if(line == null) done = true;

else{

    out.println(“Echo: ”+line);

    if(line.trim().equals(“BYE”))

        done = true;

}

}

incoming.close();

 

out.print(字符串);

5.       其他情况

如果发送二进制数据,将把数据流转换成DataInputStreamDataOutputStreams;

如果发送专门的对象,将改用ObjectInputStreamObjectOutputStreams;

 

3.3        发送e-mail

若要发送e-mail,必须建立一个到达端口25(SMTP端口)的套接字连接.SMTP即简单邮件传输协议,用于描述e-mail邮件的格式.一旦连接都服务器,就可以发送一个邮件标题,后面跟随着邮件信息.

具体的操作步骤:

1.       打开到达邮件服务器的套接字

Socket s = new Socket(主机,25);

PrintWriter out = new PrintWriter(s.getOutputStream());

2.       将下面这些信息发送给打印数据流

HELO sending host

MAIL FROM: <sender email address>

RCPT TO: <recipient email address>

DATA

Mail message

(any number of lines)

QUIT

 

3.4        高级套接字编程

1.       套接字超时

Socket.setSoTimeout(毫秒);  设置一个超时值

2.       半关闭

当客户程序将一个请求发送给服务器时,改服务器必须能够确定该请求何时结束.许多网络协议都是以数据行为单位来运行的.关闭套接字的输出数据流,以此向服务器表示请求的数据的结束,但是仍然使输入数据流保持打开状态,这样就可以读取应答信息.

3.       因特网地址

使用InetAddress类可以主机名与因特网地址之间进行转换;java.net软件包支持IPv6协议的因特网地址;静态方法getByName方法能够返回主机的InetAddress对象;使用getAddress方法来返回IP地址.getLocalHost方法获取本地主机IP地址.

 

3.5        URL连接

1.       URL(通用资源定位符)URI(通用资源标识符)

获得该资源内容

URL url = new URL(urlString);

InputStream uin = url.openStream();

BufferedReader in = new BufferedReader(new InputStreamReader(uin));

String line;

While((line=in.readLine())!=null){

    Process line;

}

 

URI纯粹是个符号结构,用于指定构成Web资源的字符串的各个不同部分.URL是一种特殊类型的URI,它包含了用于查找某个资源的足够信息.Java库中,URI类不包含用于访问通用资源标识符设定的资源的任何方法,它的唯一作用是进行分析.URL类则可以打开到达资源的一个字符串.建立URI的规则如下:

[scheme:] schemeSpecificPart [#fragment]

  其中,[scheme:] 绝对URI 否则相对URI, schemeSpecificPart以一个/开头URI是不透明的.采用分层结构的URIschemeSpecificPart都是如下结构:

  [//authority] [path] [?query]

如果基于服务器的URI, authority部分将采用下面的形式:

  [user-info@] host [:port]

URI有一些对标识符进行分析处理的方法,查看便知.

2.       使用URLConnection来检索信息

获取URLConnection对象

URLConnection conn = url.openConnection();

设置任何请求的属性

setDoInput,setDoOutput,setIfModifiedSince,setUseCaches,

setAllowUserInteraction,setRequestProperty

连接远程资源

conn.connect();

查询头部信息

getContentType,getContentEncoding,getDate,getExpiration,getLastModified

访问资源数据

getInputStream,getObject

 

如果访问某个受口令保护的Web,必须执行下列操作步骤:

以并置的形式输入用户名冒号和口令

String input = username + “:” + password;

计算产生的字符串的Base64编码

String encoding = base64Encode(input);

调用名字为”Authorization”和值为”Basic”+encodingsetRequestProperty方法

conn. setRequestProperty(”Authorization”, ”Basic”+encoding);

连接远程资源

conn.connect();

查询应答头部信息中第n关键字/

String key = conn.getHeaderFieldkey(n);

String value = conn.getHeaderField(n);

Map headerFields = conn.getHeaderFields();

 

3.6        发送表单数据

使用GET方法时,只需要将各个参数附加到URL的结尾处.形式如下:

http://host/script?parameters

+取代所有空格,%取代所有非数字字符,后随一个两位数的十六进制数.

 

使用POST方法时,不是将参数附加给URL,而是获取来自URLConnection的输出数据流,并且将名字/值对写入该输出数据流.但仍然必须对这些值进行URL编码,并且用字符&将这些值分开.

 

URLConnection对象首先将一个请求头部发送给服务器.该头部第一行必须是

Content-Type: type

其中type通过是如下类型之一:

text/plain

text/html

application/octet-stream

application/x-www-form-urlencode

内容类型的后面必须跟随下面这行:

Content-Length: length

头部的结束由一个空行来指明.然后,是发送的数据部分.Web服务器将把头部剥离掉,然后将数据部分发送给服务器脚本程序.

 

3.7        接收来自Web的信息

Java使用applet来检索接收Web的信息.

 

 

 

 

 

                                                       2007-08-13

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值