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

Socket 接收数据线程, 处理粘包问题, 解释自定义报文数据 在网上很多新手在开发java TCP Socket 程序时, 都不知道怎么处理, 特别是在数据包粘在一起的时候, 不知道怎么取到完整的数据包, 也不知道从什么地方开始取数据 在Socket开发中最基本工作是: 确定双方交互的报文规范 本方的规范是: 报文开头: EB90EB90 报文格式: 报文头(4byte) + 数据长度(2byte) +类型(2byte) +数据(Nbyte)... 阅读详情

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

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

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

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

 

 

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

 

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

 

包类型 byte 型

包长度 int 型

消息体 byte[]

 

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

 

发包方法如下:

  1. private void sendTextMsg(DataOutputStream out,String msg ) throws IOException {    
  2.         byte[] bytes= msg.getBytes();    
  3.         int totalLen = 1 + 4 + bytes.length;    
  4.                                 out.writeByte(1);    
  5.         out.writeInt(totalLen);    
  6.         out.write(bytes);    
  7.         out.flush();    
  8.     }    
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();      }   

 

客户端发送消息类为:

  1. import java.io.DataOutputStream;    
  2. import java.io.IOException;    
  3. import java.io.InputStream;    
  4. import java.io.OutputStream;    
  5. import java.net.Socket;    
  6. import java.net.UnknownHostException;    
  7. import java.util.Scanner;    
  8.     
  9. public class MsgClient {    
  10.     
  11.     private DataOutputStream outs;    
  12.         
  13.     public static void main(String[] args) {    </
【嵌入式项目应用】__UART自定义通信协议代码实现方法 通信协议不难理解,就是两个(或多个)设备之间进行通信,必须要遵循的一种协议。百度百科的解释:通信协议是指双方实体完成通信或服务所必须遵循的规则和约定。通过通信信道和设备互连起来的多个不同地理位置的数据通信系统,要使其能协同工作实现信息交换和资源共享,它们之间必须具有共同的语言。交流什么、怎样交流及何时交流,都必须遵循某种互相都能接受的规则。这个规则就是通信协议。相应该有很多读者都买过一些基于串口通信的模块,市面上很多基于串口通信的模块都是自定义通信协议,有的比较简单,有的相对复杂一点。 阅读详情

相关推荐

基于 TCP 协议自定义 Socket 数据帧来进行短数据的传输

我们总是喜欢瞻仰大厂的大神们,但实际上大神也不过凡人,与菜鸟程序员相比,也就多花了几分心思,如果你再不努力,差距也只会越来越大。实际上,作为程序员,丰富自己的知识储备,提升自己的知识深度和广度是很有必要的。我们总是喜欢瞻仰大厂的大神们,但实际上大神也不过凡人,与菜鸟程序员相比,也就多花了几分心思,如果你再不努力,差距也只会越来越大。实际上,作为程序员,丰富自己的知识储备,提升自己的知识深度和广度是很有必要的。

576

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

转自:http://vtrtbb.javaeye.com/blog/849336这是转自javaeye的一篇文章,作者是vtrtbb。按照网络通信的传统,我们都会自定义协议,这有很多好处,大家可以自己体会(嘿嘿)。一直不知道socket通信时候自定义数据包是什么样子的,偶然做了个小例子。先来说说数据包的定义,我这里是包头+内容 组成的:其中包头内容分为包类型+包长度, 那就是 消息对象=包类型+包长度+消息体包类型 byte 型包长度 int 型消息体 byte[]包总长度为 1 + 4 +  消息体.ge

懒人的技术笔记 6万+

[小技巧] 如何复制知乎电子书中的文字和图片

文章目录一、背景二、复制文字1.最简单的方法(适合短小文字)2. 进阶方法(适合大段文字)三、复制图片四、注意事项 一、背景 有时候希望从书中摘录一部分文字作为笔记,但是知乎电子书阅读时候是禁止copy的,要么手打,要么OCR,给学习带来了一些不便。 审查元素后发现,知乎电子书是把文字分成一段一段的,试图F12直接copy不太方便。 本问将以谷歌Chrome浏览器为例,给出复制小技巧。 二、复制文字 1.最简单的方法(适合短小文字) 选中你需要的文字,左键单击不放,直接拖到地址栏。 然后可以从地址栏中

江南蜡笔小新 9189

基于 Socket 接口实现自定义协议通信

掌握 C 语言形式的 Socket 编程接口用法,能够正确发送和接收网络数据包 开发一个客户端,实现人机交互界面和与服务器的通信 开发一个服务端,实现并发处理多个客户端的请求程序界面不做要求,使用命令行或最简单的窗体即可。本实验涉及到网络数据包发送部分不能使用任何的 Socket 封装类,只能使用最底层的 C 语言形式的 Socket API。开发一个服务端,实现并发处理多个客户端的请求程序界面不做要求,使用命令行或最简单的窗体即可。将某客户端发送过来的内容转发给指定编号的其他客户端。

wm1634208243的博客 1097

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

一个简单自定义通信协议socket) 转自:http://vtrtbb.javaeye.com/blog/849336 这是转自javaeye的一篇文章,作者是vtrtbb。 按照网络通信的传统,我们都会自定义协议,这有很多好处,大家可以自己体会(嘿嘿)。     一直不知道socket通信时候自定义数据包是什么样子的,偶然做了个小例子。   先来说说数据包的定义,我这里是...

超哥Blog 599

全网最全的Java Socket通讯例子

前言 网上关于Java的比较完整的Socket编程例子屈指可数,参考价值不大。要么是短连接且只支持纯文本通讯;要么是短连接且只支持文件通讯;要么是基于多个短连接的文本和文件通讯;前面这些基本是单向通讯的例子,而且长连接的例子很少。当然也有比较著名的socket框架,如Netty。但这些框架高度封装,对于入门和理解Socket基础编程,未免显得吃力。本文介绍Java Socket原始通讯例子,全双工通讯,客户端和服务端互发消息,支持文本和大文件通讯,可基于例子理想可自由扩展。 ...

Kelly 6571

C++实现的Socket接口实现自定义协议通信

本文描述了一个基于TCP协议的客户端-服务器通信实验项目。实验要求两人小组分工开发,分别实现服务端和客户端程序。客户端采用多线程模式,提供7个功能选项(连接、断开、获取时间/名字/客户端列表、发送消息、退出),通过定义统一的数据包格式(包含目的ID、请求类型和消息内容)与服务器交互。服务器同样采用多线程处理并发连接,根据请求类型返回相应数据或转发消息。实验涉及socket编程、多线程通信、数据包格式设计等关键技术,最后要求使用Wireshark抓包验证功能实现。文中提供了核心数据结构和关键代码片段,展示了客

毕业作品网站 3439

unity + python socket通信,自定义数据包

但是大家都知道,tcp是流式传输协议,特别是针对图像这类大的数据包是不能够很好的实现帧之间的拆分的,我们需要自定义协议的数据包头和数据包体来实现不定长的数据传输,接下来讲一下如何在python和c#中实现字节层面上的数据拆分和组合。此处仅仅提供对应的关键步骤的代码实现手段和原理讲解,如有错误欢迎大家指正!

weixin_47232366的博客 2711

socket编程之自定义TCP帧数据包

该操作位于计算机数据链路层,基本是对计算机中底层二进制数据操作。 帧数据包一般格式:包头 + 数据体 + 校验码 。 一般步骤: 创建Socket 对象 ; 获得socket.getOutputStream()和socket.getInputStream()对...

chouwayun2376的博客 1486

Socket组包和分包快速理解及相关示例

socket 分包和组包:建议使用字节流。组包和拆包是一个近似序列化和反序列化的过程。 目录 组包 拆包 C++组包发送与拼包解析 组包拆包示例 消息形式为: 包长度(short)+包头(short)+messages(string)+包尾(short) 组包 组包的意思是按照协议构建二进制数组数据。 private void writesMessage(short cmd ,...

纸上得来终觉浅,绝知此事要躬行 4598

socket发送自定义IP包之解析

使用原始套接字发送自定义IP包 这里介绍Windows Sockets的一些关于原始套接字(Raw Socket)的编程。同Winsock1相比,最明显的就是支持了Raw Socket套接字类型,通过原始套接字,我们可以更加自如地控制Windows下的多种协议,而且能够对网络底层的传输机制进行控制。 1、创建一个原始套接字,并设置IP头选项。 SOCKET sock; sock =

cohenxiaomiao的专栏 4012

TCP自定义数据包的Socket编程(一)

java在网络方面的出色表现相信大家有目共睹,用java做Socket编程是件有趣的事情,下面是实际项目中的代码,初学者可能觉得不是那么浅显易懂,所以加入了详细注释,废话不多说了服务端代码如下:[code="java"]package com.tcp; import java.io.IOException; import java.io.InputStream; import java....

fengkuai100的专栏 1169

UG二次开发帮助文档【梅雷】2016版.rar_GRIP注册表_UG梅雷NET错误_UG梅雷工具箱_nxopen vs2015_

UG二次开发帮助文档中文版,可以帮助UG二次开发者,很好的一款帮助文档,里面有很多例子的源码,希望对大家有帮助。

上一篇: C Union的用法
下一篇: Android问题集锦之二十一 No resource found that matches the given nam
这是什么树
博客等级 码龄8年 105粉丝 236原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值