首页 | 财经 | 资源 | 理财 | 考研 | 职场 | 论文 | 资格 | 股票学院 |

股票学院: 股票入门 - 股票知识 - 股票术语 - 炒股技巧 - 选股技巧 - 跟庄技巧 - 炒股经验 - 投资策略 - K线图 - 均线 - 分时图 - 成交量 - 波浪理论 - 基本面分析 - 心理分析 - 涨停研究 - 趋势线 - 江恩理论 - MACD - KDJ - 技术指标 - 财经股票书籍在线阅读 - 金融类书籍下载 - 银行学院 - 保险学院 - 外汇学院 - 债券学院 - 股票学院 - 基金学院 - 港股学院 - 黄金学院

当前位置:天下金融网 > 金融云 > 文章正文

Socket技术,实现Http协议和游戏服务器协议(Java代码)

时间:2019-08-01 16:41:03来源:今日头条作者:佚名

在网络技术中,前后端通讯是一个难点,也是一个服务器程序员必须攻克的技术瓶颈。在两台计算机要实现信息交互,就需要一种技术来说,而两台计算机网卡来实现,无非就是两种技术UDP和TCP,其中,两种技术由于不同的特性,使用在不同的地方,在一些不要求高到达型传输领域(如:视频)使用UDP之外,90%的通讯都是通过TCP协议来传输,由于其可靠的安全达到性。

在程序员眼里,不用太想了解网卡是通过5层协议(或者说3层协议)怎么实现tcp通讯,在编程语言里socket就是tcp的代名词(可能有点不准备哈,但是我个人是这样认为的)。

我们先用一个简单的http协议中get案例来说,让大家更好理解游戏前后端的通讯协议指定。

Socket技术,实现Http协议和游戏服务器协议(Java代码)

以下为java代码:

  1. public class testHttpClient { 
  2. public static void main(String[] arg){ 
  3. Socket socket=new Socket(); 
  4. try { 
  5. socket.connect(new InetSocketAddress("www.baidu.com", 80), 300); 
  6. OutputStream o=socket.getOutputStream(); 
  7. //http协议字符串 包括包头和包体,http采用"\r\n"做为分割,包头除了第一排之外,都是采用key:value方式来保存信息,一把服务器解锁提取 
  8. String requestStr="GET / HTTP/1.1\r\n" //第一排三个信息 分别是 1、请求方式(一把都会用两张get和post) 2、请求路径 3、采用http1.1协议 
  9. +"Host: www.baidu.com\r\n" //申明Host 
  10. //如果有其它hearder 字段信息可以防止在这里 
  11. +"\r\n" //这里表示包头结束 
  12. +"\r\n"; //这里表示包体结束(由于这个get没有任何的结构体,如果需要向post那样传参 key1=value1&key2=value2,注意一定要在包头中增加"Content-Length:***"申明包体长度) 
  13. o.write(requestStr.getBytes()); 
  14. o.flush(); 
  15. BufferedReader i= new BufferedReader(new InputStreamReader (socket.getInputStream())); 
  16. String response=""; 
  17. String readOneStr=null; 
  18. while ((readOneStr=i.readLine())!=null){ 
  19. response+=readOneStr+"\r\n"; 
  20. System.out.println(response); 
  21. }catch (IOException ioe){ 
  22. ioe.printStackTrace(); 
socket技术,实现http协议和游戏服务器协议(java代码)

重点说明一下整个socket发送内容:http协议采用“\r\n”作为解码器分割符号,这个协议的二进制流包括包头和包体两个部分,请求协议具体内容:

包头:

  1. GET / HTTP/1.1\r\n 

使用空格分割成三个信息1、请求方式(一把都会用两张get和post) 2、请求路径 3、采用http1.1协议

  1. Host: www.baidu.com\r\n 
  2. Content-Length: ***\r\n 
  3. Content-type:application/json\r\n 
  4. Cookie:************\r\n 

采用key:value的方式向服务器提交信息。Content-Length很重要,用于服务器读取包体的长度。

  1. \r\n 

再用“\r\n”来说明http包头信息结束,后面的字节流是包头内容

  1. \r\n 

这个说明请求包体结束

这里基本上一个http协议请求协议结束,然后我们再来看看服务器http响应信息,也是包括包头和包体,包体有点变化的是第一个排“HTTP/1.1 200 OK\r\n” 也是三部分信息,返回协议,状态码和状态(http中200就是成功响应的意思),除此以外也是也是key:value值了。也是采用连续的两个“\r\n”来分割包头和包体字节流。包体就没有什么好说了,就是一些html、css、js代码,也就我们实际用户能看见的网页代码。

附图如下:

socket技术,实现http协议和游戏服务器协议(java代码)

看完了上面的http协议,我们就可以理解我接下来要说明我在所以游戏项目服务器设计的协议,我们游戏项目由于功能需要,都是采用tcp长连接,服务器需要定时向游戏前端发送不同指令和响应前端请求,所以需要一个严谨高效的通讯协议:

包头

  1. 包头开始识别码(int)4+ 命令编号(shot)2 + 消息唯一编号(int)4 +内容长度(int)4 

包体

  1. 内容bytes[] 

用意说明:包头含有四个重要信息,第一个是包头开始识别码,用于服务器在循环读取socket管道信息时,发现新包开始。第二个是命令编号,就是前来请求服务器的动作指令(如:"1"用户登入验证,“2”为击杀命令),服务器会自动去调用响应模块代码。第三部分是这个包唯一码,用于防止前端重复提交包,造成服务器业务逻辑错误。第四部分,就是包体字节流长度。这样,每一个包头固定长度为14字节,而包体是可有可无的,取决于调用命令是否是需要前端传递参数。

相关阅读

焦点图文

关于我们 | 广告服务 | 商务合作 | 网站地图

版权所有 Copyright(C)2018-2020 苏州骐云跃网络科技有限公司,未经授权禁止复制或建立镜像,否则将依法追究法律责任!
声明:我们不做任何形式的代客理财及投资指导,凡是以天下金融网名义做股票推荐的行为均属违法!
广告商的言论与行为均与天下金融网无关!股市有风险,投资需谨慎。
苏公网安备 32050502000166号
苏ICP备14018528号
商务合作:联系我们

天下金融网版权所有