[英]Why do I have header checksum erro in AutoIt UDP protocol?
我正在使用AutoIt的標准UDP功能。 我測試了UDP數據包並將其轉儲到回送接口127.0.0.1(向自己發送udp數據包)。 我用RawCap捕獲了它,然后在Wireshark中打開了它。 它告訴我報頭校驗和有問題。 為什么? 我能以某種方式(使用AutoIt)將HTTP封裝在UDP中嗎?
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ButtonConstants.au3>
HotKeySet("{esc}", "Cleanup")
HotKeySet("{enter}", "sendData")
Global $ConnectedSocket = -1
Global $MainSocket
Local $g_IP, $RogueSocket, $GOOEY, $edit, $input, $butt, $msg
Local $ret, $recv
$g_IP = "127.0.0.1"
$_INCOMING_FLAG = "UDP DATA: "
OnAutoItExitRegister ("Cleanup")
; 1. UDP Listener ### Start The UDP Services ###
;==============================================
UDPStartup()
OnAutoItExitRegister ("Cleanup")
; 1. UDP Listener ### Create a Listening "SOCKET"
;==============================================
$socket = UDPBind($g_IP, 65432)
If @error <> 0 Then Exit
; 3. GUI ### Create a GUI for chatting
;==============================================
$GOOEY = GUICreate("P2P Chat", 300, 200)
$edit = GUICtrlCreateEdit("", 10, 40, 280, 150, $WS_DISABLED)
$input = GUICtrlCreateInput("", 10, 10, 200, 20)
$butt = GUICtrlCreateButton("Send", 210, 10, 80, 20, $BS_DEFPUSHBUTTON)
GUISetState()
; GUI Message Loop
;==============================================
While 1
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Then ExitLoop
If $msg = $butt Then sendData()
$data = UDPRecv($socket, 200)
If $data <> "" Then
GUICtrlSetData($edit, GUICtrlRead($edit) & $_INCOMING_FLAG &$data & @CRLF)
EndIf
;~ Sleep(50)
WEnd
GUIDelete($GOOEY)
Func sendData()
If $socket <> 0 Then
$status = UDPSend($socket, GUICtrlRead($input))
If $status = 0 Then
MsgBox(0, "ERROR", "Error while sending UDP message: " & @error)
Exit
EndIf
ElseIf $ret > 0 Then
; UPDATE EDIT CONTROL WITH DATA WE SENT
;----------------------------------------------------------------
GUICtrlSetData($edit, GUICtrlRead($edit) & GUICtrlRead($input) & @CRLF)
GUICtrlSetData($input, "")
EndIf
EndFunc ;==>sendData
Func Lookup()
; If no connection look for one
Return 0
EndFunc ;==>Lookup
Func Cleanup()
UDPCloseSocket($socket)
UDPShutdown()
EndFunc ;==>Cleanup
我猜所有錯誤的校驗和都是0x0000
; 在這種情況下,您可能正在運行TCP Checksum Offloading 。 這是試圖讓網絡硬件計算校驗和的操作系統(這將減少CPU的負載)。 這些校驗和不是您的應用程序中的錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.