博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
初探Socket
阅读量:6412 次
发布时间:2019-06-23

本文共 1528 字,大约阅读时间需要 5 分钟。

使用Socket

Socket是两台主机之间的一个连接,它可以完成7个操作。

  • 连接远程机器
  • 发送数据
  • 接收数据
  • 关闭连接
  • 绑定端口
  • 监听入站数据
  • 在绑定端口上接受来自远程机器的连接

Java中的Socket类提供了对应前4个操作方法,后面的3个操作仅服务器需要,即等待客户端的连接。一旦连接建立,本地和远程主机就从这个socket得到输入流和输出流,使用这两个流可以相互发送数据。

读取服务器数据

欲连接的服务器是时间服务器(NTP),下面是通过Telnet来从时间服务器获取当前时间

通过Telnet访问时间服务器

通过Telnet连接到NTP服务器(time.nist.gov,该服务器在美国)的13端口,对方返回当前的格林威治时间,使用的协议的daytime协议,该协议在RFC867中有详细说明。下面通过JAVA程序来获取当前时间。

public static void main(String[] args) {        try (Socket socket = new Socket("time.nist.gov", 13)) {            socket.setSoTimeout(15000);            InputStreamReader reader = new InputStreamReader(socket.getInputStream(), "ASCII");            StringBuilder sb = new StringBuilder();            for (int c = reader.read(); c!=-1; c=reader.read())                sb.append((char)c);            Date date = parseDate(sb.toString());            System.out.println(date);        } catch (Exception e) {            e.printStackTrace();        }    }        static Date parseDate(String s) throws ParseException {        String[] pieces = s.split(" ");        String dateTime = pieces[1] + " " + pieces[2] + " UTC";        DateFormat format = new SimpleDateFormat("yy-MM-dd hh:mm:ss z");        return format.parse(dateTime);    }

通过上面代码执行后输出的是本地时间,因为JAVA会自动帮我们进行时区转换(时区的设置和JVM虚拟的有关)。

半关闭Socket

close()方法会直接关闭Socket。有时希望只关闭连接的一半,即输入或者输出,可以使用下面两个方法:

public void shutdownInput()public void shutdownOutput()

这两个方法并不会关闭Socket。实际上它会调整与Socket连接的流,使它认为已经到了流的,它不会在发送数据或接收数据。关闭输入之后再读取输入流会返回-1,关闭输出流之后再向Socket写入数据会抛出一个IOException异常。

转载于:https://www.cnblogs.com/xidongyu/p/6185099.html

你可能感兴趣的文章
git入门与实践【转】
查看>>
WPF 虚拟键盘
查看>>
储存卡无法打开专家教您怎么数据恢复
查看>>
彼得原理
查看>>
如何利用【百度地图API】,制作房产酒店地图?(下)——结合自己的数据库...
查看>>
[20171113]修改表结构删除列相关问题3.txt
查看>>
特征选择
查看>>
在Winform程序中设置管理员权限及为用户组添加写入权限
查看>>
RTMP直播到FMS中的AAC音频直播
查看>>
多能互补提速 加快我国能源转型和现代能源体系建设
查看>>
《JavaScript设计模式》——2.5 多种调用方式——多态
查看>>
Redis开发运维实践高可用和集群架构与实践(二)
查看>>
程序员的常见“谎话”:对,这是一个已知 Bug
查看>>
如何侦查SQL执行状态
查看>>
CentOS 7 命令行如何连接无线网络
查看>>
Ubuntu 12.04上享用新版本Linux的功能
查看>>
logstash + grok 正则语法
查看>>
Zimbra开源版(v8.6)安装说明
查看>>
Android性能优化之TraceView和Lint使用详解
查看>>
linux centos7.2 安装mysq,nginx,php
查看>>