查看“核心技术Ⅱ:网络”的源代码
←
核心技术Ⅱ:网络
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
[[category:JavaCore]] == 实现服务端 == === 手动实现:telnet === telnet 是一种用于网络编程的调试工具,可以在命令shell中输入telnet来启动它。 * 在Windows中,需要激活telnet:“控制面板”->“程序”->“打开/关闭Windows特性”->“Telnet客户端”。 如: <syntaxhighlight lang="bash"> telnet time-a.nist.gov 13 # 用time-a.nist.gov在端口13上建立telnet会话 </syntaxhighlight> [[File:连接到服务器端口的客户端.png|600px]] === Java实现:socket === <syntaxhighlight lang="java"> import java.io.*; import java.net.*; import java.util.*; public class SocketTest lS { public static void main(String[) args) throwsIOException { try(Socket s = new Socket(”time-a.nist.gov”,13); Scanner in = new Scanner(s.getInputStream(),”UTF-8'’)) { while (in.hasNextline()) { String line = in.nextline(); System.out.println(line); } } } </syntaxhighlight> 如果连接失败,它将抛出一个UnknownHostException异常;如果存在其他问题,它将抛出一个IOException异常。<br/> (<big>[[网络基础]]</big>) ==== 相关方法 ==== jva.net.Socket 1.0 * Socket(String host, int port) *: 构建一个套接字,用来连接给定的主机和端口。 * InputStream getlnputStream() * OutputStream getOutputStream() *: 获取可以从套接字中读取数据的流,以及可以向套接字写出数据的流。 === 套接字超时 === 从套接字读取信息时,在有数据可供访问之前,读操作将会被阻塞。对于不同的应用,应该确定合理的超时值。 # 调用“setSoTimeout”方法设置超时值(单位:毫秒): #: <syntaxhighlight lang="java"> Socket s = new Socket(. . .); s.setSoTimeout(lOOOO); // time out after 10 seconds </syntaxhighlight> # 捕获“SocketTimeoutException”异常: #: 如果已经为套接字设置了超时值,并且之后的读操作和写操作在没有完成之前就超过了时间限制,那么这些操作就会抛出SocketTimeoutException异常; #: <syntaxhighlight lang="java"> try { InputStream in = s.getlnputStream(); //read from in . . . } catch(InterruptedIOException exception) { . . . } </syntaxhighlight> # 使用可以超时的无连接套接字: #* “Socket s = new Socket(String host, int port);”会一直无限期地阻塞下去,直到建立了到达主机的初始连接为止; #: <syntaxhighlight lang="java"> Socket s = new Socket(); s.connect(new InetSocketAddress(host, port), timeout); </syntaxhighlight> ==== 相关方法 ==== jva.net.Socket 1.0 * Socket() 1.1 *: 创建一个还未被连接的套接字。 * void connect(SocketAddress address) 1.4 *: 将该套接字连接到给定的地址。 * void connect(SocketAddress address, int timeoutlnMi11iseconds) 1.4 *: 将套接字连接到给定的地址。如果在给定的时间内没有响应,则返回。 * void setSoTimeout(int timeoutlnMilliseconds) 1.1 *: 设置该套接字上读请求的阻塞时间。如果超出给定时间,则抛出一个InterruptedIOException异常。 * boolean isConnected() 1.4 *: 如果该套接字已被连接,则返回true。 * boolean isClosed() 1.4 *: 如果套接宇已经被关闭,则返回true === 因特网地址 === 如果需要在主机名和因特网地址之间进行转换,那么就可以使用“InetAddress”类: * 只要主机操作系统支持1Pv6格式的因特网地址,java.net包也将支持它; # 静态的“getByName”方法可以返回代表某个主机的InetAddress对象: #: 然后,可以使用“getAddress”方法来访问这些字节; #: <syntaxhighlight lang="java"> InetAddress address = InetAddress.getByName("time-a.nist.gov"); byte[] addressButes = address.getAddress(); </syntaxhighlight> # 调用“getAllByName”方法来获得所有主机: #:(一些访问量较大的主机名通常会对应于多个因特网地址,以实现负载均衡) #: <syntaxhighlight lang="java"> InetAddress[] addresses= InetAddress.getA11ByName(host) ; </syntaxhighlight> # 使用静态的“getlocalHost”方法来得到本地主机的地址: #: <syntaxhighlight lang="java"> InetAddress address = InetAddress.getLocalHost(); </syntaxhighlight> ==== 相关方法 ==== jva.net.InetAddress 1.0 * static InetAddress getByName( String host) * static InetAddress[] getAllByName(String host) *: 为给定的主机名创建一个InetAddress对象,或者一个包含了该主机名所对应的所有因特网地址的数组。 * static InetAddress getlocalHost() *: 为本地主机创建一个InetAddress对象。 * byte[] getAddress() *: 返回一个包含数字型地址的字节数组。 * String getHostAddress() *: 返回一个由十进制数组成的字符串,各数字间用圆点符号隔开,例如,“129.6.15.28”。 * String getHostName() *: 返回主机名。 == 实现服务器 == === 服务器套接字 === === 为多个客户端服务 === === 半关闭 === == 可中断套接字 == == 获取Web 数 == === URL 和URI === === 使用URLConnection 获取信息 === === 提交表单数据 === == 发送E-mail ==
返回至“
核心技术Ⅱ:网络
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
已展开
已折叠
查看
阅读
查看源代码
查看历史
更多
已展开
已折叠
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
笔记
服务器
数据库
后端
前端
工具
《To do list》
日常
阅读
电影
摄影
其他
Software
Windows
WIKIOE
所有分类
所有页面
侧边栏
站点日志
工具
链入页面
相关更改
特殊页面
页面信息