java tcp 自定义数据包_通过TCP接收数据包

如果您想要使用标识字段,则不使用标准TCP . 对于应用程序,TCP连接呈现为流 . 您无权访问基本数据包 . 此外,在标准TCP连接中,标识字段是随机的16位字段 . 0x0d没有填充此宽度,很可能不会是常量 . 但是,我可以想象您需要这种情况的其他几种情况 .

首先,如果您希望使用基于数据包的协议,请尝试UDP . UdpClient类(http://msdn.microsoft.com/en-us/library/system.net.sockets.udpclient.aspx)将允许您接收单个数据报,然后您可以操作它 .

其次,如果你实际上是在使用TCP,并且出于某种原因确实需要获得带有标识0x000d的数据包,那么你需要在堆栈上低得多 . Winsock通过RAW套接字(http://msdn.microsoft.com/en-us/library/windows/desktop/ms740548(v=vs.85).aspx)公开了这一点,但似乎不允许XP和超越 .

第三,如果您正在寻找具有名为PacketID的字段的应用程序定义数据包,则会在TCP上叠加数据包协议 . 在所有可能的情况下,将有一个具有常量值的StartOfPacket字节和一个EndOfPacket字节 . 但是,还有其他一千种方法可以对数据包进行打包,您必须检查服务器实现以确定解析流的正确方法 . 无论如何,使用TcpListener,TcpClient或Socket,您将需要循环读取流到缓冲区 . 每次读取后,扫描缓冲区以获取有效数据包,然后对其进行处理 . 此时,您可以根据数据包的偏移量检查PacketID字段的内容 .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值