HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
0515
よもぎWinSockのrecv関数やrecvfrom関数5解決


よもぎ

リンク

2008/5/15(Thu) 21:14:55|NO.15846

WinSockを使ってUDPで通信したいのですが、
recv関数やrecvfrom関数を使うと、
実行しているプログラムとHSPのスクリプトエディタが重くなってしまいます。
一体何が原因なのでしょうか。



この記事に返信する


よもぎ

リンク

2008/5/15(Thu) 21:15:32|NO.15847

スクリプトです。


#uselib "ws2_32.dll" #cfunc WSAStartup "WSAStartup" int, sptr #func WSACleanup "WSACleanup" #cfunc socket "socket" int, int, int #func closesocket "closesocket" int #cfunc bind "bind" int, sptr, int #cfunc recv "recv" int, sptr, int, int #cfunc recvfrom "recvfrom" int, sptr, int, int, sptr, sptr #cfunc inet_addr "inet_addr" sptr #cfunc htons "htons" int #cfunc WSAGetLastError "WSAGetLastError" #define AF_INET 2 #define SOCK_DGRAM 2 #define PORT 9999 sdim wsaData, 512; sdim szDescription, 256; sdim szSystemStatus, 128; sdim sockaddr, 16; sdim fromaddr, 16; sdim szBuf, 1024; hostname = "192.168.0.4"; fromlen = 160; svaddr = inet_addr(varptr(hostname)); memset sockaddr, 0, 16 memset fromaddr, 0, 16 wpoke sockaddr, 0, AF_INET wpoke sockaddr, 2, htons(PORT) lpoke sockaddr, 4, svaddr nRtn = WSAStartup(2, varptr(wsaData)); sock = socket(AF_INET, SOCK_DGRAM, 0); nRtn = bind(sock, varptr(sockaddr), 16); repeat cls nRtn = recv(sock, varptr(szBuf), 256, 0); mes nRtn mes szBuf nRtn = WSAGetLastError(); mes nRtn await 1 loop closesocket(sock); WSACleanup;



Megane

リンク

2008/5/15(Thu) 21:21:38|NO.15848

ループの中でclsを実行すべきではないでしょうし、
await 1ではウェイトが短すぎるのではありませんか?



よもぎ

リンク

2008/5/16(Fri) 18:41:51|NO.15863

Meganeさん返信ありがとうございます

>ループの中でclsを実行すべきではないでしょうし、
たしかにそうですね
boxfに書きなおしておきます

>await 1ではウェイトが短すぎるのではありませんか?
awaitを実行する前にrecvfromで止まってしまうのです
ただ、止まるのはデータを受信する前だけで、データを受信すると次の行が実行されます


あぁ、もしかしてrecv関数自体がそういうものなのでしょうか
もうちょっと調べて分からなかったらまた聞きにきます



よもぎ

リンク

2008/5/16(Fri) 23:31:58|NO.15869

なんとか解決することができました。



Megane

リンク

2008/5/17(Sat) 08:41:03|NO.15874

適当な返答で申し訳なかったですが、
どうやったらうまくいったのか、教えてもらえませんか?



ONION software Copyright 1997-2023(c) All rights reserved.