网络编程中服务器端与浏览器的交互的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络编程中服务器端与浏览器的交互的问题相关的知识,希望对你有一定的参考价值。


服务端代码:

//服务器端
public class Server
public static void main(String[] args) throws Exception
ServerSocket serverSocket = new ServerSocket(8888);
System.out.println("服务器启动==========");

while(!serverSocket.isClosed())
Socket socket = serverSocket.accept(); //阻塞,等待连接

System.out.println("与 " + socket.toString() + "连接成功");
try
// I/O
InputStream inputStream = socket.getInputStream(); //接收数据流
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream,"UTF-8"));

String message;
while((message = reader.readLine())!= null)
if(message.length() == 0) break;
System.out.println(message);

System.out.println("接收到来至:" + socket.toString() + "的数据");
catch (IOException e)
e.printStackTrace();
finally
try
socket.close();
catch (IOException e)
e.printStackTrace();





服务器端启动:

网络编程中服务器端与浏览器的交互的问题_java网络编程


使用浏览器与服务器端交互

​localhost:8888​

网络编程中服务器端与浏览器的交互的问题_java网络编程_02

回到服务器端查看输出:

网络编程中服务器端与浏览器的交互的问题_Socket_03


浏览器与服务器端建立连接成功,并遵循HTTP协议发出请求数据包:

网络编程中服务器端与浏览器的交互的问题_浏览器与服务器端_04


HTTP协议中请求数据头通常包括四个部分:

  1. 请求行,包括:请求类型,资源路径以及HTTP版本等信息。
  2. 请求头部,紧接着请求行之后的部分,用来说明服务器要使用的附加信息。
  3. 空行,请求头部后面的空行,是必须的。
  4. 请求数据,也叫主体,可以添加任何数据。

在这个例子中请求数据为空。

在上面,浏览器与服务器端交互时,提示网页无法运行。

这是因为,服务器端没有对浏览器发出的请求做出响应。我们需要在服务器端编写响应浏览器的代码。

public class Server 
public static void main(String[] args) throws Exception
ServerSocket serverSocket = new ServerSocket(8888);
System.out.println("服务器启动==========");

while(!serverSocket.isClosed())
Socket socket = serverSocket.accept(); //阻塞,等待连接

System.out.println("与 " + socket.toString() + "连接成功");
try
// I/O
InputStream inputStream = socket.getInputStream(); //接收数据流
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream,"UTF-8"));

String message;
while((message = reader.readLine())!= null)
if(message.length() == 0) break;
System.out.println(message);

System.out.println("接收到来至:" + socket.toString() + "的数据");


OutputStream outputStream = socket.getOutputStream();
outputStream.write("HTTP/1.1 200 OK\\r\\n".getBytes());
outputStream.write("Content-Length:11\\r\\n\\n".getBytes());
outputStream.write("Hello World!".getBytes());
outputStream.flush();
catch (IOException e)
e.printStackTrace();
finally
try
socket.close();
catch (IOException e)
e.printStackTrace();





浏览器重新访问:​​localhost:8888​

网络编程中服务器端与浏览器的交互的问题_java网络编程_05

得到响应结果。

附:HTTP协议——响应状态码

  • 1XX(临时响应)
    表示临时响应并需要请求者继续执行操作的状态代码
  • 2XX(成功)
    表示成功处理了请求的状态代码。
  • 3XX(重定向)
    表示要完成请求,需要进一步操作。通常,这些状态代码用来重定向。
  • 4XX(请求错误)
    这些状态代码表示请求可能出错,妨碍了服务器的处理。
  • 5XX(服务器错误)
    这些状态代码表示服务器在尝试处理请求时发生内部错误。这些错误可能是服务器本身的错误,而不是请求出错。


以上是关于网络编程中服务器端与浏览器的交互的问题的主要内容,如果未能解决你的问题,请参考以下文章

Web端与Client客户端数据交互方案选择

网络编程--网络编程介绍

服务端与客户端的交互技术有几种

dubbo源码:dubbo服务端与消费端交互过程

客服端与服务器端JSON数据交互的POST传输:

客服端与服务器端JSON数据交互的POST传输: