TCP通讯socket自定义协议的实现
转发(JAVA):http://blog.csdn.net/u010818425/article/details/53448817
一个简单的自定义通信协议(socket),http://blog.csdn.net/lincyang/article/details/6109076
http://vtrtbb.iteye.com/blog/849336
socket编程,实先数据包的转发,C语言版 https://zhidao.baidu.com/question/588813998.html
socket 编程之大小端字节序 http://blog.csdn.net/e_wsq/article/details/17495365
socket传送数据,一般来讲是char型的,如何传送我们需要的数据类型勒?
.结构体;, Json序列化, . 定义一个class 。
.结构体
相对来说简单点,看看网上的一个例子:
假设需要传送的结构体如下:
struct person{
char name[];
int age;
float high;
};
可在发送数据的地方对数据进行处理,将其转换成一个字符串进行传送,而在接受方定义相同的结构体对这个字符串进行解析即可。
发送方代码如下:
char temp[]; //传送的字符串
struct person p1; //声明一个需要传送的结构体
//以下是结构体的初始化信息
p1.age = ;
p1.high = 1.80f;
strcpy(p1.name,"zhangsan",sizeof(p1.name));
memset(temp,,sizeof(temp)); //对该内存段进行清
memcpy(temp,&p1,sizeof(person)); //把这个结构体中的信息从内存中读入到字符串temp中
//接下来传送temp这个字符串就可以了
sendto(sock,temp,sizeof(person),,(SOCKADDR*)&addSer,sizeof(SOCKADDR));
//这样这个结构体的信息就发送到addSer相应的套接字了
接收方代码如下:
同样需要定义字符串和相同的结构体对象
char temp[]; //传送的字符串
struct person p2; //声明一个存放接收信息的结构体
memset(temp,,sizeof(temp)); //清内存
//下面是接收字符串的代码
recv(clientSocket,temp,,);
//下面对字符串信息进行还原,将其变成我们的结构体数据
memcpy(&p2,temp,sizeof(person)); //解析过程,将字符串的内容写入到p2所在内存完成解析
下面就可以对p2中的数据进行各种操作了,也完成了结构体数据的传送。
. Json序列化
很显然上面若是很复杂,结构体是不能够搞定的!Json序列化是一个好的东西。
从原理上来讲就是你在传递你的数据的时候。按照Json数据的key告诉他数据的类型,按照Json的value告诉数据的值。就这样,于是乎就可以传过去了。
C++需要一个jsoncpp的文件。具体的操作Google吧!
.定义一个class
这是我今天上午发现的,原来定义一个类,再将它指针操作就可以发过去了。这种方法真是太帅了!
让我也想到,第一种方法也可以取地址发过去吧!!
TCP/IP网络数据的封包和解包 http://blog.csdn.net/dai_jing/article/details/17914445
Linux网络编程常见问题总结: http://blog.csdn.net/a_ran/article/details/44101065
搜索方式:socket自定义数据包
TCP通讯socket自定义协议的实现的更多相关文章
- 移动网络应用开发中,使用 HTTP 协议比起使用 socket 实现基于 TCP 的自定义协议有哪些优势?
HTTP 是应用层协议,TCP 是传输层协议(位于应用层之下),放在一起类比并不合适.不过猜测楼主是想对比 “标准 HTTP 协议” 还是 “自定义的协议(基于 TCP Socket)” . 一般来说 ...
- 【转】Netty之解决TCP粘包拆包(自定义协议)
1.什么是粘包/拆包 一般所谓的TCP粘包是在一次接收数据不能完全地体现一个完整的消息数据.TCP通讯为何存在粘包呢?主要原因是TCP是以流的方式来处理数据,再加上网络上MTU的往往小于在应用处理的消 ...
- Netty之解决TCP粘包拆包(自定义协议)
1.什么是粘包/拆包 一般所谓的TCP粘包是在一次接收数据不能完全地体现一个完整的消息数据.TCP通讯为何存在粘包呢?主要原因是TCP是以流的方式来处理数据,再加上网络上MTU的往往小于在应用处理的消 ...
- 第13章 TCP编程(4)_基于自定义协议的多线程模型
7. 基于自定义协议的多线程模型 (1)服务端编程 ①主线程负责调用accept与客户端连接 ②当接受客户端连接后,创建子线程来服务客户端,以处理多客户端的并发访问. ③服务端接到的客户端信息后,回显 ...
- python网络编程:TCP通讯模板、粘包及解决方案、自定义报头
一.TCP通讯模板 二.远程CMD程序 三.解决粘包问题 四.解决粘包问题2 一.TCP通讯模板 TCP客户端 import socket c = socket.socket() # 连接服务器 c. ...
- C# Socket的TCP通讯
Socket的TCP通讯 一. socket的通讯原理 服务器端的步骤如下. (1)建立服务器端的Socket,开始侦听整个网络中的连接请求. (2)当检测到来自客户端的连接请求时,向客户端发送收到连 ...
- python 全栈开发,Day33(tcp协议和udp协议,互联网协议与osi模型,socket概念,套接字(socket)初使用)
先来回顾一下昨天的内容 网络编程开发架构 B/S C/S架构网卡 mac地址网段 ip地址 : 表示了一台电脑在网络中的位置 子网掩码 : ip和子网掩码按位与得到网段 网关ip : 内置在路由器中的 ...
- 第13章 TCP编程(3)_基于自定义协议的多进程模型
5. 自定义协议编程 (1)自定义协议:MSG //自定义的协议(TLV:Type length Value) typedef struct{ //协议头部 ];//TLV中的T unsigned i ...
- java基础55 UDP通讯协议和TCP通讯协议
本文知识点(目录): 1.概述 2.UDP通讯协议 3.TCPP通讯协议 1.概述 1.在java中网络通讯作为Socket(插座)通讯,要求两台都必须安装socket. 2.不同的 ...
随机推荐
- 使用as3控制动画的播放与暂停
1.需要两个按钮元件 2.在属性面板为两个按钮元件分别命名为pausebutton与playButton 3.代码 stop(); pausebutton.visible = false; playB ...
- 准确理解SO_REUSEADDR
默认情况下,套接字不同一个正在使用的本地地址绑定到一起.但在少数情况下,仍有必要以这种方式,来实现对一个地址的重复利用.每个连接都是通过它的本地及远程地址的组合,"独一无二&qu ...
- Node.js知识点
1. 入口文件app.js里的路由,按顺序执行: 2.
- Python-基础-时间日期处理小结
Python-基础-时间日期处理小结 涉及对象 1. datetime 2. timestamp 3. time tuple 4. string 5. date datetime基本操作 1. 获取当 ...
- python中使用xlrd、xlwt操作excel表格详解
python读excel——xlrd 这个过程有几个比较麻烦的问题,比如读取日期.读合并单元格内容.下面先看看基本的操作: 首先读一个excel文件,有两个sheet,测试用第二个sheet,shee ...
- 【uTenux实验】事件标志
事件标志是一个用来实现同步的对象,由多个位组成,用作指示对应事件存在的标志.事件标志由用来指示对应事件存在的位模式(bitpattern)和一个等待事件标志的任务队列组成. uTenux提供了一组AP ...
- Spark Streaming、Kafka结合Spark JDBC External DataSouces处理案例
场景:使用Spark Streaming接收Kafka发送过来的数据与关系型数据库中的表进行相关的查询操作: Kafka发送过来的数据格式为:id.name.cityId,分隔符为tab zhangs ...
- php代码运行提速的20个小技巧(转)
用单引号代替双引号来包含字符串,这样做会更快一些.因为PHP会在双引号包围的字符串中搜寻变量,单引号则 不会,注意:只有echo能这么做,它是一种可以把多个字符串当作参数的“函数”(译注:PHP手册中 ...
- 【Robot Framework】robot framework 学习以及selenium、appnium、requests实践(一)
话说之前自己写了个selenium的自动化框架,然后又研究了下RF,觉得RF这种基于关键字驱动的框架更为容易上手,当然在做一些比较繁琐的验证时,似乎还不是太灵活,不如自己写几行python来的实惠(也 ...
- input元素垂直居中
chrome,firefox,safari, ie9+ 会根据高度自动居中文字: IE9- 以下用这段代码垂直居中: input[type="text"] { line-heigh ...