初探Socket
使用Socket
Socket是两台主机之间的一个连接,它可以完成7个操作。
- 连接远程机器
- 发送数据
- 接收数据
- 关闭连接
- 绑定端口
- 监听入站数据
- 在绑定端口上接受来自远程机器的连接
Java中的Socket类提供了对应前4个操作方法,后面的3个操作仅服务器需要,即等待客户端的连接。一旦连接建立,本地和远程主机就从这个socket得到输入流和输出流,使用这两个流可以相互发送数据。
读取服务器数据
欲连接的服务器是时间服务器(NTP),下面是通过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异常。
初探Socket的更多相关文章
- [python]初探socket
1.什么是socket? Socket中文译作:套接字,但是大家一般约定俗称的都用:socket.我想在解释socket是什么之前,先说它是用来干嘛的:socket是来建立'通信'的基础,建立连接,传 ...
- python初探 socket
1.什么是socket? Socket中文译作:套接字,但是大家一般约定俗称的都用:socket.我想在解释socket是什么之前,先说它是用来干嘛的:socket是来建立‘通信’的基础,建立连接,传 ...
- [Python]再学 socket 之非阻塞 Server
再学 socket 之非阻塞 Server 本文是基于 python2.7 实现,运行于 Mac 系统下 本篇文章是上一篇初探 socket 的续集, 上一篇文章介绍了:如何建立起一个基本的 sock ...
- Python网络编程—socket(一)
从今天开始python基础就介绍完毕了,下面我们将进阶到socket网络编程的介绍,那么socket是什么呢?我们带着这个问题开始今天的介绍: 一.socket初探 socket通常也称作" ...
- C Socket初探 - 加入多线程支持,限制最大接入客户端个数
C Socket初探 - 加入多线程支持,限制最大接入客户端个数 先上一些多线程需要使用的函数定义: DWORD WINAPI ProcessClientRequests(LPVOID lpParam ...
- C Socket初探
C Socket初探 前段时间写了个C# Socket初探,这次再写个C语言的Socket博文,运行效果如下: 实现步骤: 1. Server端 #include <stdio.h> // ...
- nodejs初探(三)实现一个简单的socket交互
看一下nodejs中通过socket和客户端交互的最简单例子 // Sever --> Client 的单向通讯 var net = require('net'); var chatServe ...
- Socket编程初探
一.什么是Socket? 通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.在Internet上的主机一般运行了多个服务软件,同时提供几种服务.每种服务都打开一个S ...
- python之路 socket,socketsever初探
socket的英文原义是"孔"或"插座".作为BSD UNIX的进程通信机制,取后一种意思.通常也称作"套接字",用于描述IP地址和端口,是 ...
随机推荐
- Intellij Idea 15 下新建 Hibernate 项目以及如何添加配置
1.说明:Idea 下,项目对应于 Eclipse 下的 workspace,Module 对应于 Eclipse 下的项目.Idea 下,新添加的项目既可以单独作为一个 Project,也可以作为一 ...
- 三种上传文件不刷新页面的方法讨论:iframe/FormData/FileReader
发请求有两种方式,一种是用ajax,另一种是用form提交,默认的form提交如果不做处理的话,会使页面重定向.以一个简单的demo做说明: html如下所示,请求的路径action为"up ...
- C# Linq排序
今天在家看了一下linq,实践了一下书中代码,发现排序和查重的先后顺序太重要了. using System; using System.Collections.Generic; using Syste ...
- enumerate用法总结-Python 3
enumerate()说明 enumerate()是python的内置函数 enumerate在字典上是枚举.列举的意思 对于一个可迭代的(iterable)/可遍历的对象(如列表.字符串),enum ...
- linux中字体的安装以及Terminal字体重叠问题解决
安装wps的时候,经常会提示你系统字体缺失,这些字体网上都有,就不分享了,直接讲安装吧. 就比如这个Wingdings字体,在字体目录中新建一个目录Wingdings,将ttf字体文件复制进去,在终端 ...
- HTML5 数据集属性dataset
有时候在HTML元素上绑定一些额外信息,特别是JS选取操作这些元素时特别有帮助.通常我们会使用getAttribute()和setAttribute()来读和写非标题属性的值.但为此付出的代价是文档将 ...
- Workflow笔记2——状态机工作流
状态机工作流 在上一节Workflow笔记1——工作流介绍中,介绍的是流程图工作流,后来微软又推出了状态机工作流,它比流程图功能更加强大. 状态机工作流:就是将工作流系统中的所有的工作节点都可以看做成 ...
- javascript的理解及经典案例
js的简介: JavaScript是一种能让你的网页更加生动活泼的程式语言,也是目前网页中设计中最容易学又最方便的语言. 你可以利用JavaScript轻易的做出亲切的欢迎讯息.漂亮的数字钟.有广告效 ...
- Reactjs-JQuery-Vuejs-Extjs-Angularjs对比
写在前面 前端越来越混乱了,当然也可以美其名曰:繁荣. 当新启动一个前端项目,第一件事就是纠结:使用什么框架,重造什么轮子? 那么,希望看完此篇,能够给你一个清晰的认识,或者让你更加地纠结和无所适从 ...
- 函数式Android编程(II):Kotlin语言的集合操作
原文标题:Functional Android (II): Collection operations in Kotlin 原文链接:http://antonioleiva.com/collectio ...