socketTCP 如何按消息类型发送?
前段时间在公司里,用的框架 有个参数很好,是按照消息类型的ID发送
比如 我指定的消息类型是0x1 就是私聊发送,0x2就是大厅广播 0x3就是群发消息
我现在想实现这个,怎么实现啊
让客户端能按照这个消息的类型进行辨别到底send的是哪个类型
我见Send并没有这个参数啊
难道是底层特意加了一个特殊字符进行处理的?
[解决办法]
在使用者看来,网络就像是一条导线,它不关心你的数据内容,tcp协议只是用来保证你的数据到达对方的。
我建议你还是慢慢来,你现在还没准备好做网络编程。
[解决办法]
你说的1 2 3都是宏定义的
[解决办法]
定义个发送数据结构体,定义个参数来标识消息类型。
[解决办法]
你想让客户端知道要发送的是哪个类型的消息是不可能通过简单的设置参数就可以实现的,如果你想让对方知道你发送的是哪个类型就自己定义一个头包,里面放置类型标识。客户端根据标识确定类型。WSAAsyncSelect(h_Socket, Form1.hwnd, &H1234,FD_READ)指的是当h_Socket有响应时,向Form1.hwnd窗口发送H1234消息,不是你想的那种用法。
[解决办法]
他们把这些参数封装过了,你指定的参数到了发送的时候应该是会序列化为码流再发出去的。而且TCP还会涉及到一个粘包的问题,它不关心你发的内容,TCP栈缓冲区会等待数据量到了一定程度时才发出去,所以这可能导致你期望的一个包对方只有一部分接收到。
楼上说的封装成一个结构体实际上和序列化为二进制发出去是一样的道理,只是两边应该对同一种数据结构有约定,那么随便你怎么封装都可以。也就是按照字节数去取数据:
总长度 | 指令 | 内容长度 | 内容
[解决办法]
你的这个问题和通信无关。你需要做的是自己定义包的结构。当接收到数据后,对包的结构进行解析,取出自己需要的ID。