本文共 6733 字,大约阅读时间需要 22 分钟。
创建服务器:ServerSocketimport java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.ServerSocket;import java.net.Socket;/** * 创建服务器,并启动 */public class Server { private ServerSocket server;//创建服务器需要ServerSocket类。 public static void main(String[] args) { Server server = new Server();//必须创建本类的对象调用该类的方法。 server.start(); } /** * 启动服务器方法 */ public void start(){ try { server = new ServerSocket(8888);//服务器启动起来了, this.receive();//等待接收客户端的信息, } catch (IOException e) { e.printStackTrace(); } } /** * 接收客户端 */ private void receive(){ try { Socket client =server.accept();//等待客户端的连接,当在浏览器中输入localhost:8888则会进入下面的方法。 //接收客户端的请求信息 StringBuilder sb =new StringBuilder(); String msg =null; BufferedReader br = new BufferedReader( new InputStreamReader(client.getInputStream()) ); while((msg=br.readLine()).length()>0){ sb.append(msg); sb.append("\r\n"); } String requestInfo =sb.toString().trim(); System.out.println(requestInfo); /**下面就是http协议: * * GET / HTTP/1.1 * Host: localhost:8888 Connection: keep-alive Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*;q=0.8 User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36 Accept-Encoding: gzip,deflate,sdch Accept-Language: zh-CN,zh;q=0.8 */ } catch (IOException e) { } } /** * 听着服务器 */ public void stop(){ }}html语言:超文本标记语言,因为它也是一个文本,实际上就是一个字符串,但是有标签和格式。再建立一个java程序的服务器,上述表单提交后则会进入下面的Java代码。读取数据的第二种方式:用字节数组接收。private void receive(){ ServerSocket server = new ServerSocket(8888); try { Socket client =server.accept(); byte[] data=new byte[20480]; int len =client.getInputStream().read(data);//通过字节一次性读取 //接收客户端的请求信息 String requestInfo=new String(data,0,len).trim(); System.out.println(requestInfo); } catch (IOException e) { }} 协议:协议就是规范。应用层:HTTP FTP TELNET SNMP DNS 传输层:TCP UDP网络层:IP主机-网络层 以太网 IEEE802.3 令牌环网:IEEE802.4HTTP:超文本传输协议,是网络中应用层的协议,建立在tcp、ip的基础上,所以传输的时候就要借助socket,http协议是使用可靠的tcp连接,默认的端口是80,目前最新的版本是1.1,对应的RFC文档是RFC2068,下载网址www.ietf.org/rfc/rfc2068.txt.常见的HTTP客户端是浏览器,http遵循请求-相应模型(Request-Response)。HTTP协议规定了http客户端和服务器发送接收数据的严格格式。浏览器就是http客户端,发送的请求遵循严格的http协议要求的请求格式。请求格式如下:GET / HTTP/1.1(请求方式)Host: localhost:8888Connection: keep-aliveAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*;q=0.8User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36Accept-Encoding: gzip,deflate,sdchAccept-Language: zh-CN,zh;q=0.8 http协议规定,请求由3部分组成,分别是:-请求方式 URI(统一资源定位符,就是请求的资源名字) http协议版本-一系列请求的头信息-请求正文(post方式才有,get方式没有)请求头信息和请求正文必须有换行,换行符就是区分请求头个请求正文的。http响应格式:也是由3部分组成。-http协议的版本 状态代码 描述(200表示OK,500表示系统内部错误,404表示找不到)-响应头(正文长度是字节长度,比如112,表示只有112个字节,浏览器读到112个字节就不读了。)-响应正文/** * 创建服务器,并启动 * 1、请求 * 2、响应 */public class Server3 { private ServerSocket server; public static final String CRLF="\r\n"; public static final String BLANK=" "; public static void main(String[] args) { Server3 server = new Server3(); server.start(); } /** * 启动方法 */ public void start(){ try { server = new ServerSocket(8888); this.receive(); } catch (IOException e) { e.printStackTrace(); } } /** * 接收客户端 */ private void receive(){ try { Socket client =server.accept();//此处会阻塞,浏览器中输入http://localhost:8888 即可进入这个方法进行访问。 byte[] data=new byte[20480]; int len =client.getInputStream().read(data); //接收客户端的请求信息 String requestInfo=new String(data,0,len).trim(); System.out.println(requestInfo); /* * GET / HTTP/1.1 Host: localhost:8888 Connection: keep-alive Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*;q=0.8 User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36 Accept-Encoding: gzip,deflate,sdch Accept-Language: zh-CN,zh;q=0.8*/ //响应正文 StringBuilder responseContext =new StringBuilder(); responseContext.append("第一个表单 method:请求方式 get/post get: 默认方式,数据量小,安全性不高 post:量大,安全性相对高 action:请求的服务器路径 id:编号,前端区分唯一性 ,js中使用 name:名称,后端(服务器)区分唯一性 ,获取值 只要提交数据给后台,必须存在name
本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/4833647.html,如需转载请自行联系原作者