一个简单的自定义通信协议(socket)

本文介绍了如何自定义TCP通信协议,以解决分包和黏包问题。通过创建包头(包含包类型和包长度)和包体,确保数据完整传输。示例代码展示了客户端和服务端如何实现数据发送与接收,强调了在设计协议时需注意的问题,并提到了mina和netty框架在处理此类问题上的应用。
摘要由CSDN通过智能技术生成
               

转自:http://vtrtbb.javaeye.com/blog/849336

这是转自javaeye的一篇文章,作者是vtrtbb。

按照网络通信的传统,我们都会自定义协议,这有很多好处,大家可以自己体会(嘿嘿)。

 

 

一直不知道socket通信时候自定义数据包是什么样子的,偶然做了个小例子。

 

先来说说数据包的定义,我这里是包头+内容 组成的:其中包头内容分为包类型+包长度, 那就是 消息对象=包类型+包长度+消息体

 

包类型 byte 型

包长度 int 型

消息体 byte[]

 

包总长度为 1 + 4 +  消息体.getBytes().length

 

发包方法如下:

private void sendTextMsg(DataOutputStream out,String msg ) throws IOException {          byte[] bytes= msg.getBytes();          int totalLen = 1 + 4 + bytes.length;                                  out.writeByte(1);          out.writeInt(totalLen);          out.write(bytes);          out.flush();      }   

 

客户端发送消息类为:

import java.io.DataOutputStream;  import java.io.IOException;  import java.io.InputStream;  import java.io.OutputStream;  import java.net.Socket;  import java.net.UnknownHostException;  import java.util.Scanner;    public class MsgClient {        private DataOutputStream outs;            public static void main(String[] args) {          try {              MsgClient client = new MsgClient();              client.connServer("1

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值