DNS
DNS为什么不采用单点的集中式的设计方式,而是使用分布式集群的工作方式?
DNS的一种简单的设计模式就是在因特网上只使用一个DNS服务器,该服务器包含所有的映射,在这种集中式的设计中,客户机直接将所有查询请求发往单一的DNS服务器,同时该DNS服务器直接对所有查询客户机做出响应,尽管这种设计方式非常诱人,但他不适用当前的互联网,因为当今的因特网有着数量巨大并且在持续增长的主机,这种集中式设计会有单点故障(嗝屁一个,全球着急),通信容量(上亿台主机发送的查询DNS报文请求,包括但不限于所有的HTTP请求,电子邮件报文服务器,TCP长连接服务),远距离的时间延迟(澳大利亚到纽约的举例),维护开销大(因为所有的主机名-ip映射都要在一个服务站点更新)等问题
tcp socket通信过程
tcp socket编程 java:
目的:接收客户端传来的字节流,转化成字符流,再转化成大写,传回客户端 ,客户端把大写的打印出来
Client端代码
public class Client {
public static void main(String[] args) {
//1.建立socket --> 指定要连接的server端口
try {
Socket clientSocket = new Socket("127.0.0.1", 9999);
//读取键盘输入的字节流
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
// 2. 从Socket中获取I/0流; outputstream(为了向server发数据) ,, inputstream(接收server端数据)
OutputStream outputStream = clientSocket.getOutputStream();
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(outputStream));
while (true) {
String line = br.readLine();//从键盘不断输入的字符串
bw.write(line);
bw.newLine();//换行,标志着一段字符输入完毕,服务端readLine才会确认输入完毕
bw.flush();
if (line.equals("over")) {
break;
}
//读取从服务端传来的字符
//读取服务端发来的
BufferedReader reader=new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
System.out.println(reader.readLine());
}
//释放资源
br.close();
bw.close();
clientSocket.close();
// 3.关闭连接
} catch (IOException e) {
e.printStackTrace();
}
}
}
Server端代码
public class Server {
public static void main(String[] args) {
//1.开启serversocket 设定端口号给予客户端连接
try {
ServerSocket serverSocket = new ServerSocket(9999);
//2.阻塞等待client端 accept
Socket acceptSocket = serverSocket.accept();
System.out.println(acceptSocket.getInetAddress().getHostAddress() + " has connected");//表示某台网络设备与服务器连接成功
// 3.获取io流 inputstream(接收client端数据) ,,如果要向client发数据 可以创建outputstream()
InputStream inputStream = acceptSocket.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
PrintWriter pw = new PrintWriter(acceptSocket.getOutputStream(), true); //自动刷新缓冲区
//把客户端传过来的字节流转换成字符流
String line = null;
while (null != (line = bufferedReader.readLine())) {
if (line.equals("over")) {
break;
}
System.out.println(line);
pw.println("服务端大写之后发来的是" + line.toUpperCase());
}
// 4.关闭连接
pw.close();
bufferedReader.close();
acceptSocket.close();
System.out.println(acceptSocket.getInetAddress().getHostAddress() + "has disconnected");//表示某台网络设备与服务器连接断开
} catch (IOException e) {
e.printStackTrace();
}
}
}