网络编程中服务器端与浏览器的交互的问题
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();
服务器端启动:
使用浏览器与服务器端交互
localhost:8888
回到服务器端查看输出:
浏览器与服务器端建立连接成功,并遵循HTTP协议发出请求数据包:
HTTP协议中请求数据头通常包括四个部分:
- 请求行,包括:请求类型,资源路径以及HTTP版本等信息。
- 请求头部,紧接着请求行之后的部分,用来说明服务器要使用的附加信息。
- 空行,请求头部后面的空行,是必须的。
- 请求数据,也叫主体,可以添加任何数据。
在这个例子中请求数据为空。
在上面,浏览器与服务器端交互时,提示网页无法运行。
这是因为,服务器端没有对浏览器发出的请求做出响应。我们需要在服务器端编写响应浏览器的代码。
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
得到响应结果。
附:HTTP协议——响应状态码
- 1XX(临时响应)
表示临时响应并需要请求者继续执行操作的状态代码 - 2XX(成功)
表示成功处理了请求的状态代码。 - 3XX(重定向)
表示要完成请求,需要进一步操作。通常,这些状态代码用来重定向。 - 4XX(请求错误)
这些状态代码表示请求可能出错,妨碍了服务器的处理。 - 5XX(服务器错误)
这些状态代码表示服务器在尝试处理请求时发生内部错误。这些错误可能是服务器本身的错误,而不是请求出错。
以上是关于网络编程中服务器端与浏览器的交互的问题的主要内容,如果未能解决你的问题,请参考以下文章