学习心得
学习了网络编程,把很多知识融合到一起了,网络上传输信息需要客户端和服务器,最重要是要有服务器,发送信息给服务器,服务器接收分析之后再返给接收信息的客户端。通信要求需要IP地址和端口号。
心情:和掌握情况成正比
掌握情况:记的碎知识很多


网络编程(网络通信)
服务器:是一台电脑
客户端:电脑平板手机网页。。。
我们即将在自己的电脑上搭建服务器环境,我们自己的电脑还得是客户端。自己的电脑既是服务器又是客户端
Socket 编程
Socket 编程是建立在TCP/IP协议
如何在网络环境下访问其他主机?
通过IP地址+端口号形式可以访问其他的主机
通过指令控制台CMD:ipconfig 查看 ipv4地址,是当前局域网下的ip地址。
一台电脑可以有好多个端口号,每个端口号对应的程序也可以不同
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
public class Ch01 {
@Test
public void server() throws IOException {
//创建一个服务器对象,绑定在8888端口
ServerSocket serverSocket = new ServerSocket(8888);
System.out.println("服务器已经启动。。。");
Socket socket = serverSocket.accept();//服务器等待客户端连接
InputStream inputStream = socket.getInputStream();//读取客户端发过来的信息
byte [] buffer = new byte[1024*1024];
int len;
while((len = inputStream.read(buffer)) !=-1){
System.out.println("服务器已接收客户端的数据:"+new String(buffer,0,len));//从0开始
}
//释放资源
inputStream.close();
socket.close();
}
@Test
// connect连接
public void client() throws IOException {
//创建Socket通信客户端
Socket socket = new Socket();
//第一个参数是获取当前电脑的IP地址
//第二个参数就是服务器的端口号
socket.connect(new InetSocketAddress(InetAddress.getLoopbackAddress(),8888));
//客户端发送数据给服务器
OutputStream outputStream = socket.getOutputStream();
String data = "发送的一句话说点啥,hello server!";
System.out.println("客户端已发送信息:"+data);
outputStream.close();
socket.close();
} }
C/S架构:Client/Server客户端/服务器,QQ,360,腾讯会议,游戏
B/S架构:Browser/Server浏览器/服务器
移动互联,手机端为主,C/S架构,
Java主要要做的就是架构中的Server端。
1.静态资源:所有用户访问后,得到的结果都是一样的。html
2.动态资源:每个用户访问后,得到的结果可能不一样。爱奇艺
web服务器。 接收用户的请求,处理请求,给出响应。
通过浏览器访问我们的ServerSocket服务器,我们通过浏览器给我们的ServerSocket服务器发起了请求 我要访问服务器!!!
通过IP地址 + 端口号
本机的IP地址:
1.cmd—ipconfig
2.127.0.0.1—本机(个人建议,任何情况都好使)
3.localhost—本机(前提条件:你的电脑要联网,激活一下网卡)
127.0.0.1:8080 我们通过浏览器访问我们的ServerSocket,得到了一堆信息,看不懂。
其实发送过来的信息,报文。浏览器传递过来的一些消息。
User-Agent:告诉服务器我是从什么样的客户端来的。
Host: 127.0.0.1:8080,主机地址,目标主机。
貌似浏览器也是通过Socket和我们的服务器建立了TCP连接
我们不妨把浏览器给我们的服务器发送的信息称之为“请求”, 而且这个请求格式满足了http的协议。
请求:客户端—>服务器
响应:服务器—>客户端
我需要给浏览器一个响应!!! 我们一般情况下,给浏览器做出响应,需要遵循浏览器的格式要求:
————-响应的基本格式—————-
HTTP/1.1 200 OK
Content-Length: 39
Content-Type: text/html;charset=UTF-8
<h1>hello server</h1>
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
//resonse 响应
public class Demo {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(8888);
System.out.println("服务器启动成功");
Socket server = serverSocket.accept();
OutputStream outputStream = server.getOutputStream();
String response = "HTTP/1.1 200 OK/r/n"+
"Content-Length: 39/r/n"+
"Content-Type: text/heml;charset=UTF-8/r/n/r/n"+
"<h1>hello server</h1>";
outputStream.write(response.getBytes());
outputStream.flush();
}
}
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server01 {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(8080);
// 等待客户端的连接
Socket accept = serverSocket.accept();
// 获取一个输入流来读取客户端发送的数据
InputStream inputStream = accept.getInputStream();
byte [] buf = new byte[1024];
int len;
while((len = inputStream.read(buf)) != -1){
System.out.println(new String(buf,0,len));
}
inputStream.close();
accept.close();
}
重定向
假如我要访问的是www.baidu.com,结果页面展示的是www.jd.com
重定向会重新定位到新的页面,而且地址栏的地址也会随之变化。
public class Server03 {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(8888);
System.out.println("服务器启动成功...");
Socket server = serverSocket.accept();
OutputStream outputStream = server.getOutputStream();
// 按照http协议的格式封装一个报文数据
String response = "HTTP/1.1 302 Moved Temporarily/r/n"+
"Location: https://www.baidu.com/r/n/r/n";
outputStream.write(response.getBytes());
outputStream.flush();
// 这个流不要着急关,因为突然的关闭会导致浏览器和服务器断开连接
}
}
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
面试题:TCP 三次握手:
(1). 第⼀次握手,客户端发送syn(SYN 同步序列编号)包到服务器端,客户端进入syn_send
状态,等待服务器端确认。
(2). 第⼆次握手,服务器端向客户端回送⼀个 SYN+ACK包 ACK (Acknowledge
character)即是确认字符,服务器端进入syn_recv状态
(3). 第三次握手,客户端再次向服务器端发送确认信息,确认连接 ACK 包,至此客户
端和服务器端进⼊established状态。
(4).握手过程中传送的包不包含任何数据,连接建立后才会开始传送数据,理想状态下,
TCP连接⼀旦建立,在通信双方的任何一方主动关闭连接前,TCP连接都会⼀直保持下
去。
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/279963.html