ifで指定文字列を判断するには?


さいたま  2004-10-23 08:22:35  No: 86204

今回UDPを利用した遠隔プログラムを組んでおります。

そこで送信側に"memo"と送信した場合、受信部ではif ReceiveData = "memo" then shell "notepad"
というように、文字列で判断しております。

問題は、Textに実行ファイルパスを記入し送信した場合なのですが、
自分で考えた方法では、新たにWinsockを追加する方法なのですが、UDPでは2つ目のソケットを作成すると別ポートでもパケットが消滅してしまいます。

二つ目の方法なのですが、送信側でWinsock1.senddata "# " & Text1.Text & "
と送信して受信部で「もしも#があった場合1文字目から次の文字列を実行させる」
という方法で解決したいのですが不可能でしょうか。

文字列を分割するなどいろいろ考えましたがifではなかなかうまくできません。

他に方法がありましたら教えていただけると幸いです。


トロイ  2004-10-23 11:06:17  No: 86205

VB6として解釈するぞ。

>今回UDPを利用した遠隔プログラムを組んでおります。
実はオレも作ってみたりしている…

>そこで送信側に"memo"と送信した場合、受信部ではif ReceiveData = "memo" then shell "notepad"
>というように、文字列で判断しております。
>
>問題は、Textに実行ファイルパスを記入し送信した場合なのですが、
Textって…やっぱりReceiveDataか?
で、「問題がわからない」ぞ?

>自分で考えた方法では、新たにWinsockを追加する方法なのですが、UDPでは2つ目のソケットを作成すると別ポートでもパケットが消滅してしまいます。
まぁ、UDPはそんなもんだ。
届くか届かないかはっきりしている分、IPより楽だと思われ。
まぁ、普通は面倒だからTCP使うなw

>二つ目の方法なのですが、送信側でWinsock1.senddata "# " & Text1.Text & "
文字列…閉じてないぞw何か続くのか?

>と送信して受信部で「もしも#があった場合1文字目から次の文字列を実行させる」
>という方法で解決したいのですが不可能でしょうか。
可能だ。

>文字列を分割するなどいろいろ考えましたがifではなかなかうまくできません。
Split関数か、仕様に沿わなくても自作関数でゴリゴリ書ける。

>他に方法がありましたら教えていただけると幸いです。
仕様不明、尋ねたいのはこちらのほうかもしらん(ま、聞いたところで…orz)

表題と内容が一致していない気がするなw
で、ちゃんと受け取った後のことは書いてある通りでいけ「そう」だ。
ま、頑張れ。


さいたま  2004-10-23 11:33:38  No: 86206

返信どうもです。

>Textって…やっぱりReceiveDataか?
で、「問題がわからない」ぞ?
Tex1.textにC:\WINNT\notepad.exeとしてCommand1をクリックした場合、
Winsock1.SendData "#" & Text1.Text & ""
と実行します。

問題は受信部での処理で、あらかじめ受信文字列をReceiveDataに収納します。
そしてif ReceiveData = "memo" Thenなどのようにして処理を判断しているのですが、
Tex1.textを受信する際に、どうしてもifを使って"#"があるかどうかを判別する処理ができない。ということです。
簡単にいうとif文を使って特定の文字列があった場合以下を実行するという処理がわからないのです。

できれば処理部分を教えていただきたいです。

今更ですが、環境はWindows2000Pro,VB6.0,です。


トロイ  2004-10-23 11:53:01  No: 86207

つまり、「文字列を操作する方法がわからない」ということだな?
なら、こんな関数にReceiveDataを入れてやればいいかもしらん。
戻り値が#以降の文字列だ。

Public Function Parse(ByVal st As String) As String
    
    Dim i   As Long
    i = InStr(1, st, "#")
    If i Then
        '#がある:#以降を返す
        Parse = Right$(st, Len(st) - i)
    Else
        '#がない:stを返す
        Parse = st
    End If
    
End Function

…でもな、UDPって…{1,2,3,4,5}って送ったら、{1,2,3,4,5}が届くか、全く届かないか。
というプロトコルだったと思うぞ…
TCPなら{1,2,3,4,5}が{1,2}が届いて、{3,4,5}が次に届くこともありえるが…
ま、とりあえず文字列処理は大丈夫なはずだ。


さいたま  2004-10-23 12:17:00  No: 86208

サンプルどうもです。
これから試してみたいと思います。

TCPverも作ったんですが自分のスキルがまったくないため、一度送信したあとに、クライアント側を閉じてしまうと次からサーバー側が受け付けなくなってしまいます。

さすがに画像データや音声データ送信時にはTCPを使うしかありませんが、文字列等なので簡単なUDPにしたわけです。


匿名  2004-10-23 20:52:12  No: 86209

> TCPverも作ったんですが自分のスキルがまったくないため、一度送信したあとに、
> クライアント側を閉じてしまうと次からサーバー側が受け付けなくなってしまいます。

ローカルのポートを固定でやってたりしません?
ちょっとTCPを勉強すれば理由はわかります。

> さすがに画像データや音声データ送信時にはTCPを使うしかありませんが、
> 文字列等なので簡単なUDPにしたわけです。

逆のような気がする・・・
UDPの方が「使い方」が難しいですよ。
ネットワークがわかっていないなら、再送などの処理をしてくれるTCPを使った方がいいかと。

老婆心ながら、、
ネットワークはスタンドアロンでの常識が通用しないです。
送ったものが確実に相手に届くということを誰も保証してませんし、
決められたものしか届かないってこともありません。
膨大な金をかけているMicrosoftなどの大企業や、
オープンソースで何千何万人がソースを見ているものでも
問題がなくならないんですよ。
それから「身内でしか使わないんで」なんて自分勝手な理由で作ってると
世の中におもいっきり迷惑をかける場合もあるので
気をつけてくださいね。


さいたま  2004-10-23 21:06:41  No: 86210

>ローカルのポートを固定でやってたりしません?
某参考書のサンプルコードを利用してみたのですが確かに.Close処理等があります。
しかしその処理を消すとエラーでるんですよね・・・。
もう少し勉強してみます。

>UDPの方が「使い方」が難しいですよ。
簡単というか自分がUDPしか使えなかった。と言う事です_|‾|○

とりあえず今は参考書を何冊も片手に読みながら組んでます('A`)

こう思うとプログラマさんってスゴイナーと感心しますw


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加