Java实现socket进程通信

Java实现socket进程通信

ID:39549664

大小:151.65 KB

页数:9页

时间:2019-07-06

Java实现socket进程通信_第1页
Java实现socket进程通信_第2页
Java实现socket进程通信_第3页
Java实现socket进程通信_第4页
Java实现socket进程通信_第5页
资源描述:

《Java实现socket进程通信》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、1场景当用socket进行进程通信,传输数据的时候,会出现以下一些情况:(1)完整的一条消息被系统拆分成几条发送,例如要发送一条消息:HelloWorld,却被系统分成两条消息发送,分别为:Hello和World。(2)几条独立的消息被系统合成一条消息发送,例如要发送两条消息分别为:amemoryfrommypast和it’sbeenayear,却被系统和成一条消息发送:amemoryfrommypastit’sbeenayear。这个时候,需要为socket通信设计一种通信协议,以保证数据的准确性。2协议格式通信协议设计如下:Head:帧头,2个字节,此处为0xa5a5Type

2、:通信类型,1个字节,范围0x00~0xff    DataLength:数据长度,1个字节,即Data的字节总数,Data:实际传输的数据,长度不定CS:校验值,1个字节,type、datalength、data三个域所有字节的异或值,实际中并没用到校验End:帧尾,2个字节,此处为0xbeef 3程序设计3.1    解析思路假设socket客户端C和服务端S通信,C向S发送消息M1。1、 S收到消息M1。S把消息M1拷贝到缓存Q中,Q为循环队列。假如M1的长度大于Q的剩余空间,则只拷贝剩余空间大小的字节到Q。2、 从Q的当前指针开始,查找帧头。如果找到,则当前指

3、针向后移2个字节位置,继续查找;如果没找到,则删除前1个字节,当前指针向后移1个字节位置,继续查找3、 从Q的当前指针开始,查找。如果Q中至少还剩一个字节,则表示找到,当前指针向后移1个字节位置,否则退出解析。4、 从Q的当前指针开始,查找。如果Q中至少还剩一个字节,则表示找到,当前指针向后移1个字节位置,否则退出解析。5、 从Q的当前指针开始,向后移DataLength个字节位置,查找。如果找到,则从Q中取出一条完整的消息P1,并从Q中删除此消息空间,调用外部的回调函数;否则删除帧头的第一个字节a5,当前指针

4、指向帧头第二个字节a5位置,从步骤2开始,重新一轮解析。 3.2    数据结构查找策略枚举,用于查找时判断查找帧结构的哪个部位:[cpp] viewplaincopy1.typedef enum{  2.    SEARCH_HEAD,  3.    SEARCH_TYPE,  4.    SEARCH_LEN,  5.    //SEARCH_CS,  6.    SEARCH_END,  7.    SEARCH_NONE  8.}cache_strategy;  消息结构体,用于存储从缓存中解析出的数据:[cpp] viewplaincopy1.typedef struc

5、t{  2.    unsigned char data[SOCKET_MSG_SIZE];            //data  3.    int len;  4.    unsigned char type;  5.}socket_msg;  回调函数,用于从缓存中解析出消息时调用:[cpp] viewplaincopy1.typedef void (*tp_socket_msg_handle)(int fd, socket_msg *msg,void *args);  循环队列,用于缓存接收到的数据:[cpp] viewplaincopy1.typedef struct{

6、  2.    unsigned char buf[SOCKET_MSG_CACHE_SIZE]; //buffer for storing data read from client  3.    int front;  4.    int rear;  5.    int current;      6.    int len;  7.    int tag;            //mark that whether the cache is full,1-full,0-not full  8.    cache_strategy strategy;  9.    tp_

7、socket_msg_handle handle;//callback function to invoke when a message is parsed out        10.    void* args;                                 //external parameter  11.    socket_msg recv_msg;                            //parsed message  12.  

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。