常见客户端与服务端

  客户端:

    浏览器:IE

  服务端:

    服务器:web服务器(Tomcat),存储服务器,数据库服务器。

(注:会用到Tomact服务器,在webapps下有一个自己创建的目录myweb,下面有一个文件1.html)

服务端原理

  自定义一个服务端,使用自己已有的客户端IE浏览器,了解一下客户端都发送了什么请求。

  

 package cn.ie_server;

 import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket; import cn.InetAdress.demo.InetAddressDemo2; public class MyTomcat { public static void main(String[] args) throws IOException {
//建立服务端的socket连接,监听9090端口
ServerSocket ss=new ServerSocket(9090);
//接收客户端发来的消息
Socket s=ss.accept(); System.out.println(s.getInetAddress().getHostAddress()); //获取客户端发送过来的请求
InputStream in=s.getInputStream(); byte [] buf=new byte[1024]; int len=in.read(buf); String text=new String(buf,0,len,"utf-8"); System.out.println(text);
//向客户端发送一些数据
PrintWriter out=new PrintWriter(s.getOutputStream(),true);
out.println("<font color='red' size='7'>欢迎光临</font>");
s.close();
ss.close();
}
}

  发送过来的请求是:

  GET / HTTP/1.1 (请求行: 请求方式 请求资源路径/myweb/1.html http协议版本)
  (请求消息头,属性名:属性值 )
  Accept: text/html, application/xhtml+xml, image/jxr, */*
  Accept-Language: zh-Hans-CN,zh-Hans;q=0.8,en-US;q=0.5,en;q=0.3
  User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)   Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586
  (支持的压缩方式)
  Accept-Encoding: gzip, deflate
  Host: 127.0.0.1:9090
  Connection: Keep-Alive8

注意:这此时开放端口后可能会连不上服务端出现以下情况

此时可以试一下将ip换成127.0.0.1 这个回送地址,因为如果在校园会出现访问限制的情况

客户端原理

  服务端给客户端的应答消息,模拟一个Tomcat服务端发送符合http协议的请求消息

 package cn.ie_server;

 import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream.GetField;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException; public class MyBrowser { /**
* @param args
* @throws IOException
* @throws UnknownHostException
*/
public static void main(String[] args) throws UnknownHostException, IOException {
Socket s=new Socket("192.168.1.127",8080); //模拟浏览器给tomcat服务端发送符合http协议的请求消息
PrintWriter out=new PrintWriter(s.getOutputStream(),true);
out.println("GET /docs/aio.html HTTP/1.1");
out.println("Accept: */*");
out.println("Host: 192.168.1.127:8080");
out.println("Connection:close");
out.println();
out.println(); InputStream in=s.getInputStream();
byte[] buf=new byte[1024];
int len=in.read(buf); String str=new String(buf,0,len);
System.out.println(str); s.close(); } }

  服务端返回的应答消息为:

(应答行 应答状态码 应答状态行描述信息)
HTTP/1.1 200 OK
(应答消息属性 属性名:属性值 )
Server: Apache-Coyote/1.1
Accept-Ranges: bytes
ETag: W/"24874-1465990848000"
Last-Modified: Wed, 15 Jun 2016 11:40:48 GMT//最后修改时间
Content-Type: text/html
Content-Length: 24874
Date: Mon, 04 Jul 2016 14:54:43 GMT
Connection: close
//空行
//应答体

<html>
<head>
<title>这是我的网页</title>
</head>

<body>

<h1>欢迎光临</h1>

<font size='5' color="red">这是一个Tomcat服务器中的资源。这是一个html网页。</font>

</body>

</html>

注意:通常我们找不到网页,会出现404的应答状态码,而成功的话会返回200的应答状态码。

  大家可以看到服务端返回的消息中有“应答行 应答状态码 应答状态行描述信息”等等一系列信息,但为什么在浏览器中只有我们看到的普通网页呢,这是因为浏览器进行了解析,但是怎么解析呢?只是就用到了URL这个类。

 package cn.ie_server;

 import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection; public class URLDemo { /**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
String str_url="http://127.0.0.1:8080/myweb/1.html?name=zhangsan"; URL url=new URL(str_url);
InputStream in=url.openStream();
byte[]buf=new byte[1024];
int len =in.read(buf);
String text=new String(buf ,0,len);
System.out.println(text);
in.close();
} }

整理的有些粗糙,大家多提一下建议哈。

java网络编程客户端与服务端原理以及用URL解析HTTP协议的更多相关文章

  1. Java网络编程(客户端和服务端原理)

    运行下面的程序,浏览器端输入自己主机的IP地址+端口号(8888),会看到服务器返回的数据内容,Eclipse控制台会打印显示收到的信息, 通过我们自定义的服务器,可以看到浏览器端向服务器发送的请求信 ...

  2. 1、简述在java网络编程中,服务端程序与客户端程序的具体开发步骤?

    网络编程分为UDP通信和TCP通信 UDP协议: 发送端:1.创建DatagramSocket对象.2.创建DatagramPacket对象,并封装数据.3.发送数据.4.释放 资源. 接收端:1.创 ...

  3. TCP/IP网络编程之多进程服务端(二)

    信号处理 本章接上一章TCP/IP网络编程之多进程服务端(一),在上一章中,我们介绍了进程的创建和销毁,以及如何销毁僵尸进程.前面我们讲过,waitpid是非阻塞等待子进程销毁的函数,但有一个不好的缺 ...

  4. TCP/IP网络编程之多线程服务端的实现(二)

    线程存在的问题和临界区 上一章TCP/IP网络编程之多线程服务端的实现(一)的thread4.c中,我们发现多线程对同一变量进行加减,最后的结果居然不是我们预料之内的.其实,如果多执行几次程序,会发现 ...

  5. Java 实现Redis客户端,服务端

    Java 实现Redis客户端,服务端 1.Java实现Redis发布订阅 1.1实例 2.[Redis]Java实现redis消息订阅/发布(PubSub) 3.java实现 redis的发布订阅 ...

  6. python网络编程:socket、服务端、客户端

    本文内容: socket介绍 TCP: 服务端 客户端 UDP: 服务端 客户端 首发时间:2018-02-08 01:14 修改: 2018-03-20 :重置了布局,增加了UDP 什么是socke ...

  7. [javaSE] 网络编程(TCP服务端客户端互访阻塞)

    客户端给服务端发送数据,服务端收到数据后,给客户端反馈数据 客户端: 获取Socket对象,new出来,构造参数:String的ip地址,int的端口号 调用Socket对象的getOutputStr ...

  8. java客户端与服务端交互通用处理 框架解析

    一.综述 java 客户端与服务端交互过程中,采用NIO通讯是异步的,客户端基本采用同一处理范式,来进行同异步的调用处理. 处理模型有以下几个要素: 1. NIO发送消息后返回的Future 2. 每 ...

  9. Java网络编程客户端和服务器通信

    在java网络编程中,客户端和服务器的通信例子: 先来服务器监听的代码 package com.server; import java.io.IOException; import java.io.O ...

随机推荐

  1. NoSQL2

    系统的可扩展性是推动NoSQL运动发展的的主要理由,包含了分布式系统协调,故障转移,资源管理和许多其他特性.这么讲使得NoSQL听起来像是一个大筐,什么都能塞进去.尽管NoSQL运动并没有给分布式数据 ...

  2. js 科学计数法

    function convertNum(num_str){ //参数必须为 字符串 //科学计数法字符 转换 为数字字符, 突破正数21位和负数7位的Number自动转换 // 兼容 小数点左边有多位 ...

  3. JavaWeb 自定义标签库开发传统标签

    自定义标签主要用于移除Jsp页面中的java代码. 移除jsp页面中的java代码,只需要完成两个步骤: 编写一个实现Tag接口的Java类,并覆盖doStartTag方法,把jsp页面中的java代 ...

  4. spark学习14(spark local模式运行spark程序的报错)

    报错1 java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries. 解 ...

  5. Android开发中的logcat工具使用

    http://os.51cto.com/art/200905/126051.htm 用adb直接查看log:    adb logcat 清除之前的log: adb logcat -c 加过滤查看lo ...

  6. scala学习手记29 - 偏应用函数

    调用函数可以说成是将函数应用于实参.如果传入所有的预期的参数,就完全应用了这个函数.如果只传入几个参数,就会得到一个偏应用函数. 偏应用函数是一个特殊的概念,在scala中它是使用val定义的,但是在 ...

  7. TCP异步IO_服务端_测试

    1.测试代码来自于 JDK7 AIO初体验 http://www.iteye.com/topic/1113611 1.1. package aio; import java.net.InetSocke ...

  8. devstack环境中不能创建cinder volume

    刚安装好的devstack环境中无法成功创建cinder volume,创建的volume的status为error:在cinder scheduler中看到失败log:2015-10-15 14:1 ...

  9. D3.js学习笔记(一)——DOM上的数据绑定

    开始学习D3.js,网上没有找到很满意的中文教程,但是发现了一个很好的英文教程,讲解的非常详细.从一个初始简单的HTML网页开始,逐步加入D3.js的应用,几乎是逐句讲解.学习的时候,就顺便翻译成中文 ...

  10. mac用ssh连接linux云服务器中文乱码或无法显示解决

    问题1:服务器是ubuntu16.04,用mac自带的ssh连接后无法正常输入中文? 解:这种情况一般是终端和服务器的字符集不匹配,MacOSX下默认的是utf8字符集. 打开编辑 .bashrc 文 ...