ab.com コミュニティ https://www.activebasic.com/forum/ |
|
UDP通信の仕方 https://www.activebasic.com/forum/viewtopic.php?t=4633 |
ページ 1 / 1 |
作成者: | Papa [ 2019年11月29日(金) 07:20 ] |
記事の件名: | UDP通信の仕方 |
UDP通信の仕方を教えて下さい。 WinSockが使えそうですがサンプルが無く困っています。 送信サンプルコードだけでも頂ければ助かります。 |
作成者: | ゲスト [ 2019年12月02日(月) 11:00 ] |
記事の件名: | Re: UDP通信の仕方 |
下記サイトの「UDP クライアント側」を移植してみました。 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 |
作成者: | Papa [ 2019年12月02日(月) 11:02 ] |
記事の件名: | Re: UDP通信の仕方 |
ユーザー名が消えてしましました。 前記は、質問者からの書き込みです。 申し訳ありません。 |
作成者: | たかせ [ 2019年12月02日(月) 20:08 ] |
記事の件名: | 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には対応してないようです。 詳細はトップページにあるヘルプセンターをご確認ください。 よろしくお願いいたします。 |
作成者: | papa [ 2019年12月03日(火) 09:51 ] |
記事の件名: | Re: UDP通信の仕方 |
アドバイスありがとうございました。 第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 |
ページ 1 / 1 | 全ての表示時間は UTC+09:00 です |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |