UDP通信の仕方を教えて下さい。
WinSockが使えそうですがサンプルが無く困っています。
送信サンプルコードだけでも頂ければ助かります。
UDP通信の仕方
Re: UDP通信の仕方
下記サイトの「UDP クライアント側」を移植してみました。
https://www.katto.comm.waseda.ac.jp/~ka ... ocket.html
sendto()にて、エラーコード10014(呼び出しでポインター引数を使用するときに、無効なポインター アドレスを検出しました。)
がでます。
どなたか、アドバイスをお願いします。
https://www.katto.comm.waseda.ac.jp/~ka ... ocket.html
sendto()にて、エラーコード10014(呼び出しでポインター引数を使用するときに、無効なポインター アドレスを検出しました。)
がでます。
どなたか、アドバイスをお願いします。
[ここをクリックすると内容が表示されます]
Declare Function inet_addr Lib "ws2_32.dll" (cp As BytePtr) As Long
Declare Function sendto Lib "wsock32.dll" (ByVal s As Long, buf As String, ByVal lngLen As Long, ByVal flags As Long,ByRef sTo As sockaddr_in, ByVal tolen As Long) As Long
Sub MainWnd_Destroy()
udp_DestroyObjects()
PostQuitMessage(0)
End Sub
Sub MainWnd_CommandButton1_Click()
'IPアドレス、ポート番号、ソケット
Dim destSocket As Dword
'sockaddr_in 構造体
Dim destSockAddr As SOCKADDR_IN
'各種パラメータ
Dim toSendText[256] As Byte
lstrcpy(toSendText,"Test")
'************************************************************
'* Windows 独自の設定 *
Dim wsaData As WSADATA
WSAStartup(MAKEWORD(2,0), wsaData)
'* 相手先アドレスの入力 *
'* sockaddr_in 構造体のセット *
ZeroMemory( VarPtr(destSockAddr), Len(destSockAddr))
destSockAddr.sin_family = AF_INET
destSockAddr.sin_port = htons(1234)
destSockAddr.sin_addr = inet_addr("127.0.0.1")
'* ソケット生成 *
destSocket = socket(AF_INET, SOCK_DGRAM, 0)
'* パケット送出 *
sendto ( destSocket, toSendText,lstrlen(toSendText)+1, 0, destSockAddr , len(destSockAddr.sin_addr ))
Sleep(5000)
MessageBox( 0,Str$(GetLastError()), "sendto", MB_OK)
'* Windows 独自の設定 *
closesocket(destSocket)
WSACleanup()
End Sub
Declare Function inet_addr Lib "ws2_32.dll" (cp As BytePtr) As Long
Declare Function sendto Lib "wsock32.dll" (ByVal s As Long, buf As String, ByVal lngLen As Long, ByVal flags As Long,ByRef sTo As sockaddr_in, ByVal tolen As Long) As Long
Sub MainWnd_Destroy()
udp_DestroyObjects()
PostQuitMessage(0)
End Sub
Sub MainWnd_CommandButton1_Click()
'IPアドレス、ポート番号、ソケット
Dim destSocket As Dword
'sockaddr_in 構造体
Dim destSockAddr As SOCKADDR_IN
'各種パラメータ
Dim toSendText[256] As Byte
lstrcpy(toSendText,"Test")
'************************************************************
'* Windows 独自の設定 *
Dim wsaData As WSADATA
WSAStartup(MAKEWORD(2,0), wsaData)
'* 相手先アドレスの入力 *
'* sockaddr_in 構造体のセット *
ZeroMemory( VarPtr(destSockAddr), Len(destSockAddr))
destSockAddr.sin_family = AF_INET
destSockAddr.sin_port = htons(1234)
destSockAddr.sin_addr = inet_addr("127.0.0.1")
'* ソケット生成 *
destSocket = socket(AF_INET, SOCK_DGRAM, 0)
'* パケット送出 *
sendto ( destSocket, toSendText,lstrlen(toSendText)+1, 0, destSockAddr , len(destSockAddr.sin_addr ))
Sleep(5000)
MessageBox( 0,Str$(GetLastError()), "sendto", MB_OK)
'* Windows 独自の設定 *
closesocket(destSocket)
WSACleanup()
End Sub
-
- 記事: 217
- 登録日時: 2006年2月05日(日) 17:10
- お住まい: 東京都
Re: UDP通信の仕方
私はUDP通信に関することは一切わかりませんが。
第2パラメータがString型での指定が影響してると思います。
そこでbuf As Stringをbuf As *Byteに直してみてください。
修正後
Declare Function sendto Lib "wsock32.dll" (ByVal s As Long, buf As *Byte, ByVal lngLen As Long, ByVal flags As Long,ByRef sTo As sockaddr_in, ByVal tolen As Long) As Long
念のためご確認願います。
String型は特殊な型をもつ変数です。またWin32 APIには対応してないようです。
詳細はトップページにあるヘルプセンターをご確認ください。
よろしくお願いいたします。
第2パラメータがString型での指定が影響してると思います。
そこでbuf As Stringをbuf As *Byteに直してみてください。
修正後
Declare Function sendto Lib "wsock32.dll" (ByVal s As Long, buf As *Byte, ByVal lngLen As Long, ByVal flags As Long,ByRef sTo As sockaddr_in, ByVal tolen As Long) As Long
念のためご確認願います。
String型は特殊な型をもつ変数です。またWin32 APIには対応してないようです。
詳細はトップページにあるヘルプセンターをご確認ください。
よろしくお願いいたします。
Re: UDP通信の仕方
アドバイスありがとうございました。
第2に加え第6パラメーターにも問題が有り修正して動作しました。
ニーズは無いと思いますが、通信に関してABのサンプルが見当たらないので
コードを残しておきます。
第2に加え第6パラメーターにも問題が有り修正して動作しました。
ニーズは無いと思いますが、通信に関してABのサンプルが見当たらないので
コードを残しておきます。
[ここをクリックすると内容が表示されます]
Declare Function inet_addr Lib "ws2_32.dll" (cp As BytePtr) As Long
Declare Function sendto Lib "wsock32.dll" (ByVal s As Long, buf As *Byte, ByVal lngLen As Long, ByVal flags As Long,ByRef sTo As sockaddr_in, ByVal tolen As Long) As Long
Sub MainWnd_Destroy()
udp_DestroyObjects()
PostQuitMessage(0)
End Sub
Sub MainWnd_CommandButton1_Click()
'IPアドレス、ポート番号、ソケット
Dim destSocket As Dword
'sockaddr_in 構造体
Dim destSockAddr As SOCKADDR_IN
'各種パラメータ
Dim toSendText[256] As Byte
lstrcpy(toSendText,"Test")
'************************************************************
'* Windows 独自の設定 *
Dim wsaData As WSADATA
WSAStartup(MAKEWORD(2,0), wsaData)
'* 相手先アドレスの入力 *
'* sockaddr_in 構造体のセット *
ZeroMemory( VarPtr(destSockAddr), Len(destSockAddr))
destSockAddr.sin_port = htons(1234)
destSockAddr.sin_family = AF_INET
destSockAddr.sin_addr = inet_addr("127.0.0.1")
'* ソケット生成 *
destSocket = socket(AF_INET, SOCK_DGRAM, 0)
'* パケット送出 *
sendto ( destSocket, toSendText,lstrlen(toSendText)+1, 0, destSockAddr , len(destSockAddr ))
MessageBox( 0,Str$(GetLastError()), "sendto", MB_OK)
'* Windows 独自の設定 *
closesocket(destSocket)
WSACleanup()
End Sub
Declare Function sendto Lib "wsock32.dll" (ByVal s As Long, buf As *Byte, ByVal lngLen As Long, ByVal flags As Long,ByRef sTo As sockaddr_in, ByVal tolen As Long) As Long
Sub MainWnd_Destroy()
udp_DestroyObjects()
PostQuitMessage(0)
End Sub
Sub MainWnd_CommandButton1_Click()
'IPアドレス、ポート番号、ソケット
Dim destSocket As Dword
'sockaddr_in 構造体
Dim destSockAddr As SOCKADDR_IN
'各種パラメータ
Dim toSendText[256] As Byte
lstrcpy(toSendText,"Test")
'************************************************************
'* Windows 独自の設定 *
Dim wsaData As WSADATA
WSAStartup(MAKEWORD(2,0), wsaData)
'* 相手先アドレスの入力 *
'* sockaddr_in 構造体のセット *
ZeroMemory( VarPtr(destSockAddr), Len(destSockAddr))
destSockAddr.sin_port = htons(1234)
destSockAddr.sin_family = AF_INET
destSockAddr.sin_addr = inet_addr("127.0.0.1")
'* ソケット生成 *
destSocket = socket(AF_INET, SOCK_DGRAM, 0)
'* パケット送出 *
sendto ( destSocket, toSendText,lstrlen(toSendText)+1, 0, destSockAddr , len(destSockAddr ))
MessageBox( 0,Str$(GetLastError()), "sendto", MB_OK)
'* Windows 独自の設定 *
closesocket(destSocket)
WSACleanup()
End Sub