- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第11章 Java网络技术(一) ;11.1 TCP Sockets基础; TCP Sockets的应用模型通常是客户/服务器模型,一个服务器在一个特定端口等待远程计算机请求资源,给予响应。客户程序绑定到这个端口,建立一个可靠连接来用于通信。
面向连接的操作使用TCP协议,在这个模式下的Socket必须在发送数据之前与目的地的Socket取得一个连接。连接建立后,Socket就可以使用一个流接口:打开—读—写—关闭。所有发送的信息都会在另一端以同样的顺序被接收。面向连接的操作比无连接的操作效率低,但是数据的安全性更高。由于Socket使用是双方的,所以在客户端和服务器端的使用稍有不同。 ;(1) 客户端请求Socket的步骤如下:
① 建立客户端Socket连接;
② 得到Socket的读和写的流;
③ 利用流;
④ 关闭流;
⑤ 关闭Socket。
使用一个服务器端的Socket请求比使用一个客户端Socket请求要麻烦一些。服务器并不是主动地建立连接。相反地,服务器被动地监听客户端的连接请示,然后给它们服务。;(2) 服务器端Socket要完成以下的基本的步骤:
① 建立一个服务器Socket并开始监听;
② 使用accept()方法取得新的连接;
③ 建立输入和输出流;
④ 在已有的协议上产生会话;
⑤ 关闭客户端流和Socket;
⑥ 回到②或者转到⑦;
⑦ 关闭服务器Socket。;图11.1 面向连接的Socket协作流程图; 例如,HTTP请求通过服务器的80端口实现,服务器端类似于Socket监听,端口号为80。如果客户端希望通过应用程序获得网页,只需采用面向连接的Socket,请求80端口,获取网页数据。首先打开一个连接,请求主机为服务器网址,请求端口号为80,然后发送命令请求“GET / HTTP/1.0\r\n\r\n”,得到返回的网页。 ;11.1.1 InetAddress类
InetAddress对象表示一个Internet主机地址。这个主机地址可以通过名字和IP地址来标识。名字即主机名,例如本机名字为snowing,为字符串类型;IP地址为3,为四字节的数字,书写形式为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()
转换成字符串格式。; 【例11.1】InetAddress对象应用的测试。获取本机地址并转换成字符串输出,输出本地主机名和IP地址以及通过局域网内计算机的名字得到它的IP地址。程序源代码如下:
//程序文件名FindHost.java
import .*;
public class FindHost
{
public static void main(String[] args)
{
try
{; InetAddress h = InetAddress.getLocalHost();
System.out.println(toString(): + h.toString());
System.out.println(getHostName(): +h.getHostName());
System.out.println(getHostAddress():+h.getHostAddress());
h = InetAddress.getByName(engine);
System.out.println(h.getHostName() +: + h.getHostAddress());
}
catch(UnknownHostException e)
{
System.out.println(e.getMessage());
}
}
}; 编译后生成Fi
文档评论(0)