一、Socket通信模型
- 利用套接字(Socket)开发网络应用程序早已被广泛采用,以至于成为事实上的标准。
- 通信的两端都要有Socket,是两台机器间通信的端点。
- 网络通信其实就是Socket间的通信。
- Socket允许程序把网络连接当成一个流,数据在两个Socket间通过IO传输。
- 一般主动发起通信的应用程序为客户端,等待通信请求的为服务端。
二、关于TCP(传输控制协议):
类别:传输层
特点:
- 基于流的方式面向连接
- 可靠通信方式
- 网络状况不佳的时候尽量降低系统由于重传带来的带宽开销
- 通信连接维护是面向通信的两个端点的,而不考虑中间网段和节点。
三、模拟TCP协议下的网络通信
客户端:
package 模拟TCP协议下的网络通信;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class Client客户端 {
public static void main(String[] args) throws UnknownHostException, IOException {
// 创建客户端Socket
Socket s = new Socket("10.255.96.129", 8888);
// 获取(output)输出流对象
OutputStream out = s.getOutputStream();
// 发送数据
String date = "Helo,你好啊,兄dei!";
out.write(date.getBytes());
// 关闭流对象
out.close();
}
}
服务端:
package 模拟TCP协议下的网络通信;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server服务端 {
public static void main(String[] args) throws IOException {
// 创建ServerSocket对象
ServerSocket ss = new ServerSocket(8888);
// 监听(阻塞)
Socket t = ss.accept();
// 获取读取(input)流对象
InputStream in = t.getInputStream();
byte[] b = new byte[1024];
int len = 0;
while ((len = in.read(b)) != -1) {
String date = new String(b, 0, len);
System.out.println(date);
}
// 服务端一般不关闭流对象
}
}
程序运行后,在服务端接收到了客户端的信息。
在这里写的只是简单的Clinet—>Server
实际上在JavaWeb上经常使用的是 浏览器—>tomcat