学习心得
学习了网络编程,把很多知识融合到一起了,网络上传输信息需要客户端和服务器,最重要是要有服务器,发送信息给服务器,服务器接收分析之后再返给接收信息的客户端。通信要求需要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/279963.html