Java Socket、计算机网络
一个服务器对应一个客户端
http://blog.51cto.com/wangdy/1588379
https://www.cnblogs.com/rocomp/p/4790340.html
package cn.day2; import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException; public class MyClient {
public static void client() throws Exception {
Socket socket = new Socket("127.0.0.1", 10000);
System.out.println("客户端启动.....");
OutputStream out = socket.getOutputStream();
DataOutputStream doutput = new DataOutputStream(out);
doutput.writeUTF("客户端发送信息");
doutput.flush();
InputStream input = socket.getInputStream();
DataInputStream dinput = new DataInputStream(input);
String str = dinput.readUTF();
System.out.print("客户端收到消息:" + str); } public static synchronized void client1() throws Exception {//错 Socket socket[] = new Socket[5];
for(int i=0;i<5;i++){
socket[i] = new Socket("127.0.0.1", 10000);
System.out.println("客户端启动.....");
OutputStream out = socket[i].getOutputStream();
DataOutputStream doutput = new DataOutputStream(out);
doutput.writeUTF("客户端发送信息"+i);
doutput.flush(); InputStream input = socket[i].getInputStream();
DataInputStream dinput = new DataInputStream(input);
String str = dinput.readUTF();
System.out.print("客户端收到消息:" + str);
}
} public static void main(String[] args) throws Exception {
// client();
client1();
}
}
package cn.day2; import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket; public class MyServer {
public static void server()throws Exception{
ServerSocket server = new ServerSocket(10000);
System.out.println("启动服务器.....");
Socket socket = server.accept();
InputStream binput = socket.getInputStream();
DataInputStream dinput = new DataInputStream(binput);
String str = dinput.readUTF();
System.out.print("服务器收到信息:" + str);
Thread.sleep(10000);
OutputStream output = socket.getOutputStream();
DataOutputStream dout = new DataOutputStream(output);
dout.writeUTF("服务器发送信息");
dout.flush();
} public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
server();
}
}
一个服务端多个客户端
package cn.day2; import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket; public class MyMulSocketServer extends ServerSocket {
public static void main(String[] args) throws IOException {
MyMulSocketServer server = new MyMulSocketServer();
}
public static final int PORT = 11112; public MyMulSocketServer() throws IOException{
super(PORT);
System.out.println("初始化服务器...");
while(true){
Socket socket = null;
try {
socket = accept();
System.out.println("连接...");
new MyThread(socket).start();;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
// try {
// if(null != socket){
// socket.close();
// }
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
}
}
} class MyThread extends Thread{
MyThread(){ }
Socket socket = null; public MyThread(Socket socket) {
this.socket = socket;
} @Override
public void run() {
try{
System.out.println("开始运行...");
BufferedReader br = null;
PrintWriter pw = null;
br = new BufferedReader(new InputStreamReader(socket.getInputStream())); pw = new PrintWriter(socket.getOutputStream(), true);
String line = br.readLine();
System.out.println("Hello " + line);
pw.println("Hello " + line);
// pw.flush(); pw.close();
br.close();
}catch( Exception e){ }finally{
// try {
// if(null != socket){
// socket.close();
// }
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
}
}
} }
package cn.day2; import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException; public class MyMulClient { public static void main(String[] args) throws IOException, IOException {
// for(int i=0;i<10;i++){
System.out.println("客户端开始...");
client();
// }
} public static void client(){
try {
Socket [] clients = new Socket[10];
for(int i=0;i<10;i++){
Socket client = new Socket("127.0.0.1", 11112);
clients[i] = client;
}
for(int i=0;i<10;i++){
Socket client = clients[i];
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); PrintWriter pw = new PrintWriter(client.getOutputStream(), true);
String line = br.readLine();
System.out.print(line);
// pw.write(line);
pw.println(line);
pw.flush(); br.close();
pw.close();
client.close();
} } catch (UnknownHostException e) {
e.printStackTrace();
} catch ( Exception e) {
e.printStackTrace();
}
}
}

计算机网络是通过传输介质、通信设施和网络通信协议,
网络传输介质是网络中发送方与接收方之间的物理通路,它对网络的数据通信具有一定的影响。常用的传输介质有双绞线、同轴电缆、光纤、无线传输媒介
OSI七层网络模型(开放系统互连参考模型)
OSI七层网络模型从上到下:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层
其中应用层、表示层、会话层、传输层被称作主机层,是开发工程师通过开发应用程序处理和实现的内容
网络层、数据链路层、物理层
第一层:物理层
为设备之间的信息传输提供可靠环境,那么这个环境是什么呢?
就是如:同轴电缆、插头、接收器、水晶头、网线等。可以在通信的两个数据终端的设备之间连接起来形成一条通路。
第二层:数据链路层
提供数据的传送服务。这里涉及一个信息就是帧,它是数据传输的单元,不同的协议帧的长短也不同。它还有差错恢复,流量控制的功能,常见的有网卡,网桥
第三层:网络层
它的作用是路由的选择,网络的激活和终止。它还有的一个重要功能就是在一条数据链路上复用多条网络连接,大多采用的是分时复用的技术
我们常见的是路由器、网关等
第四层:传输层
它是两台计算机经过网络进行数据通信时最基础的端到端的一个层次。它的服务满足了传送质量、传达速度、传送费用的不同需要。它还具有差错恢复,流量控制的功能
二、三次握手与四次挥手
TCP是面向连接的协议,因此每个TCP连接都有三个阶段:建立连接、数据传送和连接释放。
连接建立经过三个步骤,通常称为“三次握手”

第一次握手:客户机发送连接请求报文段到服务器,并进入SYN_SENT状态,等待服务器确认
第二次握手:服务器收到连接请求报文,如果同意建立连接,向客户机发送确认报文段,并为该TCP连接分配缓存和变量
第三次握手:客户机收到服务器的确认报文段后,向服务器给出确认报文段,并且也要给该连接分配缓存和变量,此包发送完毕,
- 客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。(ACK=1,seq=x+1,ack=y+1)。
TCP四次挥手过程如下:

由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
- TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送。
- 服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
- 服务器关闭客户端的连接,发送一个FIN给客户端。
- 客户端发回ACK报文确认,并将确认序号设置为收到序号加1。
Java Socket、计算机网络的更多相关文章
- 【Java】Java Socket编程(1)基本的术语和概念
计算机程序能够相互联网,相互通讯,这使一切都成为可能,这也是当今互联网存在的基础.那么程序是如何通过网络相互通信的呢?这就是我记录这系列的笔记的原因.Java语言从一开始就是为了互联网而设计的,它为实 ...
- Java Socket与操作系统的关系
Socket与操作系统有什么关系呢?请细读下文 简介 TCP简介 TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议 ...
- Java Socket:飞鸽传书的网络套接字
在古代,由于通信不便利,一些聪明的人就利用鸽子会飞且飞得比较快.会辨认方向的优点,对其进行了驯化,用来进行消息的传递——也就是所谓的“飞鸽传书”.而在 Java 中,网络套接字(Socket)扮演了同 ...
- JAVA通信系列一:Java Socket技术总结
本文是学习java Socket整理的资料,供参考. 1 Socket通信原理 1.1 ISO七层模型 1.2 TCP/IP五层模型 应用层相当于OSI中的会话层,表示层, ...
- JAVA Socket 编程学习笔记(二)
在上一篇中,使用了 java Socket+Tcp/IP 协议来实现应用程序或客户端--服务器间的实时双向通信,本篇中,将使用 UDP 协议来实现 Socket 的通信. 1. 关于UDP UDP协 ...
- JAVA Socket 编程学习笔记(一)
1. Socket 通信简介及模型 Java Socket 可实现客户端--服务器间的双向实时通信.java.net包中定义的两个类socket和ServerSocket,分别用来实现双向连接的cli ...
- Java Socket Server的演进 (一)
最近在看一些网络服务器的设计, 本文就从起源的角度介绍一下现代网络服务器处理并发连接的思路, 例子就用java提供的API. 1.单线程同步阻塞式服务器及操作系统API 此种是最简单的socket服务 ...
- JAVA Socket超时浅析
JAVA Socket超时浅析 套接字或插座(socket)是一种软件形式的抽象,用于表达两台机器间一个连接的"终端".针对一个特定的连接,每台机器上都有一个"套接字&q ...
- Java Socket编程题库
一. 填空题 ___ IP地址____用来标志网络中的一个通信实体的地址.通信实体可以是计算机,路由器等. 统一资源定位符URL是指向互联网"资源"的指针,由4部分组成:协议 ...
- Java Socket编程(转)
Java Socket编程 对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是Socket.服务端和客户端之间通过Socket建立连接,之后它们就可以进行通信了.首 ...
随机推荐
- Java中数组的插入,删除,扩张
Java中数组是不可变的,但是可以通过本地的arraycop来进行数组的插入,删除,扩张.实际上数组是没变的,只是把原来的数组拷贝到了另一个数组,看起来像是改变了. 语法: System.arrayc ...
- cesium 之三维漫游飞行效果实现篇(附源码下载)
前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. 内 ...
- (一) Keras 一元线性回归
视频学习来源 https://www.bilibili.com/video/av40787141?from=search&seid=17003307842787199553 笔记 环境为 an ...
- linux下mysql区分大小写的内容
1.数据库名严格区分大小写2.表名严格区分大小写的3.表的别名严格区分大小写4.变量名严格区分大小写5.列名在所有的情况下均忽略大小写6.列的别名在所有的情况下均忽略大小写
- asp.net FromBody接收不到参数的解决方法
今天改一个前端框架(angularjs,不兼容ie内核,需要修改),后台框架是已经写好了的,不用修改. 接口接收参数如下: [HttpPost] public async Task<Schedu ...
- Windows Server 2008 R2 Enterprise x64 部署 nginx、tomcat、mysql
部署nginx nginx主要做反向代理用,可以单独部署到其它机器上,这里nginx和tomcat部署在同一台机器上. 下载nginx-1.14.1.zip,并解压到目标目录,打开cmd进入到解压后的 ...
- UI自动化之日志
Python自动化测试中,日志输出功能是不能缺少的一部分.让我们来看看如何实现日志的输出吧 一.控制台输出日志 def get_logger(): try: if not os.path.exists ...
- 【shell基础】if分支语句
1.if判断式if [ 条件判断一 ] && (||) [ 条件判断二 ]; thenelif [ 条件判断三 ] && (||) [ 条件判断四 ]; thenels ...
- IDEA导入项目jar包红线、依赖问题....
一般遇到这种情况用以下两种方式解决....... 1.reimport包 2.清缓存重启 针对1方法: a.确实不缺包: 可以先注释掉pom文件中的jar包, 此时idea会提示import, 那就i ...
- 类LinkedList
LinkedList特点 java.util.LinkedList 集合数据存储的结构是链表结构.方便元素添加.删除的.LinkedList是List的子类,List中的方法LinkedList都是可 ...