导航:首页 > 编程大全 > socket报文工具

socket报文工具

发布时间:2021-12-03 04:37:10

java socket 写个全双工异步长连接工具类,用来向银行发送和接收报文,哪位大神能写出来,定重谢

双工?就是读写分开线程。。。。。。。。。。。如果连接被关闭,就重新打开连接

Ⅱ java socket通信中,如何让客户端连续接收服务器端发送过来的报文

使用niosocket (非阻塞socket即可)

Ⅲ QT中socket接收到的udp报文:\uFFF1,怎么批量转成QString类型

Ⅳ PC发什么报文给三菱Q03UDEPLC读写寄存器,通过ethernet 的TCP socket通信。

啊,用组态软件,如果是高级语言CVC VB那复杂了,

Ⅳ 别人规定了socket报文的结构我怎么按照这个结构发报文

首先定义一个字符数组用来存放结构体的网络字节流
char buf[2046];//存放发送的结构体字节流

typedef struct msg
{
......
}msg;//定义结构体
msg message;
发送方:
memset(buf,0,2046);
memcpy(buf,&message,sizeof(msg));
send(sock,buf,sizeof(buf),0);

接收方:
recv(sock,buf,2046,0);
memcpy(&message,buf,sizeof(msg));

Ⅵ 如何用socket发送和接收自定义数据包

网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket。Socket通常用来实现客户方和服务方的连接。Socket是TCP/IP协议的一个十分流行的编程界面,一个Socket由一个IP地址和一个端口号唯一确定。
但是,Socket所支持的协议种类也不光TCP/IP一种,因此两者之间是没有必然联系的。在Java环境下,Socket编程主要是指基于TCP/IP协议的网络编程。

Ⅶ windows下raw socket可以发送和接收tcp报文吗

一. 摘要
Raw Socket: 原始套接字
可以用它来发送和接收 IP 层以上的原始数据包, 如 ICMP, TCP, UDP...

int sockRaw = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);

这样我们就创建了一个 Raw Socket

Sniffer: 嗅探器
关于嗅探器的原理我想大多数人可能都知道
1. 把网卡置于混杂模式;
2. 捕获数据包;
3. 分析数据包.

但具体的实现知道的人恐怕就不是那么多了. 好, 现在让我们用 Raw Socket 的做一个自已的 Sniffer.

二. 把网卡置于混杂模式
在正常的情况下,一个网络接口应该只响应两种数据帧:
一种是与自己硬件地址相匹配的数据帧
一种是发向所有机器的广播数据帧
如果要网卡接收所有通过它的数据, 而不管是不是发给它的, 那么必须把网卡置于混杂模式. 也就是说让它的思维混乱, 不按正常的方式工作. 用 Raw Socket 实现代码如下:

setsockopt(sock, IPPROTO_IP, IP_HDRINCL, (char*)&flag, sizeof(flag); //设置 IP 头操作选项
bind(sockRaw, (PSOCKADDR)&addrLocal, sizeof(addrLocal); //把 sockRaw 绑定到本地网卡上
ioctlsocket(sockRaw, SIO_RCVALL, &dwValue); //让 sockRaw 接受所有的数据

flag 标志是用来设置 IP 头操作的, 也就是说要亲自处理 IP 头: bool flag = ture;
addrLocal 为本地地址: SOCKADDR_IN addrLocal;
dwValue 为输入输出参数, 为 1 时执行, 0 时取消: DWORD dwValue = 1;
没想到这么简单吧?

三. 捕获数据包
你的 sockRaw 现在已经在工作了, 可以在局域网内其它的电脑上用 Sniffer 检测工具检测一下, 看你的网卡是否处于混杂模式(比如 DigitalBrain 的 ARPKiller).
不能让他白白的浪费资源啊, 抓包!

recv(sockRaw, RecvBuf, BUFFER_SIZE, 0); //接受任意数据包

#define BUFFER_SIZE 65535
char RecvBuf[BUFFER_SIZE];
越来越发现 Sniffer 原来如此的简单了, 这么一个函数就已经完成抓取数据包的任务了.

四. 分析数据包
这回抓来的包和平常用 Socket 接受的包可就不是一回事儿了, 里面包含 IP, TCP 等原始信息. 要分析它首先得知道这些结构.
数据包的总体结构:
----------------------------------------------
| ip header | tcp header(or x header) | data |
----------------------------------------------

IP header structure:
4 8 16 32 bit
|--------|--------|----------------|--------------------------------|
| Ver | IHL |Type of service | Total length |
|--------|--------|----------------|--------------------------------|
| Identification | Flags | Fragment offset |
|--------|--------|----------------|--------------------------------|
| Time to live | Protocol | Header checksum |
|--------|--------|----------------|--------------------------------|
| Source address |
|--------|--------|----------------|--------------------------------|
| Destination address |
|--------|--------|----------------|--------------------------------|
| Option + Padding |
|--------|--------|----------------|--------------------------------|
| Data |
|--------|--------|----------------|--------------------------------|

TCP header structure:
16 32 bit
|--------------------------------|--------------------------------|
| Source port | Destination port |
|--------------------------------|--------------------------------|
| Sequence number |
|--------------------------------|--------------------------------|
| Acknowledgement number |
|--------------------------------|--------------------------------|
| Offset | Resrvd |U|A|P|R|S|F| Window |
|--------------------------------|--------------------------------|
| Checksum | Urgent pointer |
|--------------------------------|--------------------------------|
| Option + Padding |
|--------------------------------|--------------------------------|
| Data |
|--------------------------------|--------------------------------|

五. 实现 Sniffer
OK!
现在都清楚了, 还等什么.
下面是我用 BCB6 写的一个 Simple Sniffer 的代码, 仅供参考.
(需要在工程文件里加入WS2_32.LIB这个文件)
//

Ⅷ 我想用socket发送IPV6报文中的RA报文

这么复杂的问题,攻城狮是解决不掉了。只能靠程序猿

Ⅸ socket 接收到的报文存放在哪儿,这些报文最终是如何被丢弃的

你可以做个临时的实验一下;以我的经验是这样的;缓冲区的大上可以设置的;默认为8K,当数据过来的时候,你肯定有个字节数组去接收他,接一次缓冲区清空一次;等待下次过来,如果你不去接这些数据,缓冲区的数据会不断增加直到塞满8K为之;你也可以一次性用8K的容器把这些缓冲区的数据拿下来;但分析起来就麻烦了;都是连着的数据!还有一种情况;就是缓冲区里已经有了2K的数据了;你只用了1k的容器去接收这些数据;那么还有1K的数据就丢掉了;所以你以后设置客户端和服务器的时候要注意这一层;一次性发送和接收的容器最好相同

Ⅹ Java Socket开发 关于报文传递和接收

看 Oracle 官方教程,同步式的 Socket 就是传统的一问一答方式,它就是你需要的。

客户端先 socket.getOutputStream().write(...); 之后到 socket.getInputStream().read(byte[]) 在循环中读取直到 read 方法返回 -1 或你期望的字节数已经全部收到了就停下来,如果不尝试停下来,后面的 read 将会阻塞等待。


http://docs.oracle.com/javase/tutorial/networking/sockets/index.html


基于性能改进,一般我们需要使用 NIO 异步的 socket,只需要一个线程负责通信,每个线程都有自己的出站消息队列和入站消息队列,以线程为 key 区分开,通信线程只负责把各自的消息从出站队列中发送去并把收到的消息放入入站队列中,应用程序线程就去各自的消息队列中取消息就可以了。因为每个应用线程有各自的消息队列,我们把消息放入出站队列之后就到入站队列上用同步锁等待的方法阻塞到有消息回答时为止。


关于 NIO non-blocking 非阻塞式 socket,下面有一个 NBTimeServer 例子,它讲的是服务端。客户端与此类似,

http://docs.oracle.com/javase/7/docs/technotes/guides/io/example/index.html


NIO 通信线程样例。

publicvoidrun()
{
inttip=0;
try
{
selector=Selector.open();
SelectionKeyk=channel.register(selector,getInterestOptions());
k.attach(thread);//把当前线程绑定到附件中。

this.running=true;
statusChanged(Status.CONNECTED);
while(this.isRunning())
{
//select()isablockingoperation.
inteventCount=selector.select();
debug("[MC.Debug]PollingTCPevents..."+eventCount);
if(eventCount>0&&channel.isOpen()&&this.isRunning())
{
Setkeys=selector.selectedKeys();
for(Iteratoriter=keys.iterator();iter.hasNext();iter.remove())
{
SelectionKeykey=(SelectionKey)iter.next();
Threadthread=(Thread)key.attachment();

if(!key.isValid())
{//channelisclosing.
break;
}
process(key);//处理读取消息并把消息放入thread对应的队列。//写出消息类似的,不过在register时需要注册写出允许的事件,

}
}
}
}
阅读全文

与socket报文工具相关的资料

热点内容
多攻一受兽世推荐 浏览:973
今天晚上想去看电影 浏览:315
啄木鸟系列在线电影 浏览:71
新泰市电影院今日电影 浏览:275
韩国三个小时以上的电影有哪些 浏览:301
linux无法发现手机 浏览:177
win10文件打开串口失败 浏览:345
抖音开发一个网站多少钱 浏览:61
古装三圾 浏览:327
2022年台湾电影票房排行榜 浏览:775
怎么样看win10版本号 浏览:814
考研新东方网课用的什么app 浏览:733
韩国男主法国女主借种 浏览:560
翻译那我们晚上一起看电影吧 浏览:522
免费VIP视频网址 浏览:670
招财一号大数据保本基金 浏览:521
弓电影大结局怎么见红的 浏览:649
新上市电影 浏览:694
可在线搜索观看的吗网址 浏览:511
刻意暖心小说男主姓傅 浏览:551

友情链接