導航:首頁 > 編程大全 > 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報文工具相關的資料

熱點內容
word文檔里的圖片位置錯誤 瀏覽:195
win10360wifi打不開 瀏覽:745
2002電腦系統升級 瀏覽:745
被批評的app有哪些 瀏覽:512
win10如何修改hosts文件 瀏覽:971
iphone的未接來電 瀏覽:134
如何新建一個文件夾word文檔 瀏覽:74
零售商運用了什麼樣的大數據 瀏覽:557
榮耀分身微信清理es文件瀏覽器 瀏覽:682
linux賬戶設置密碼 瀏覽:69
查看資料庫各表記錄數 瀏覽:968
linux查看文件的行數 瀏覽:692
fpga約束文件如何自動生成 瀏覽:377
linux打開的文件數 瀏覽:973
win8修改公用網路 瀏覽:324
linuxlcrt 瀏覽:30
編程里res是什麼意思 瀏覽:616
dm80082版本固件 瀏覽:37
蘋果手機用什麼可以打開psd文件 瀏覽:627
服務號和小程序的區別 瀏覽:888

友情鏈接