C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.58005 の関連記事表示

<< 0 >>
■58005  ASCコードで受け取るサーバに送信したい
□投稿者/ コアラ主任 -(2011/03/23(Wed) 16:23:42)

    分類:[VB6 以前] 

    VB6SP6 開発環境:XP 実行環境:Win2000

    サーバ側がASCコードで受信します。
    どうも、送信データの作成に誤りがあるように
    思います。
    データの作成と送信を以下のように書いたのですが、
    うまく受信されていないようなのです。
    (「A」をと言うデータを送る時は以下のように
     記述しています。)
    何かお気付きの方、ご教示お願い致したく。

    -----------------------------------------------------
    Dim sdatC As String

    sdatC = "&H41"
    lngRet = send(mlngSock, ByVal sdatC, Len(sdatC), 0)
    -----------------------------------------------------

親記事 /過去ログ97より / 関連記事表示
削除チェック/

■58006  Re[1]: ASCコードで受け取るサーバに送信したい
□投稿者/ shu -(2011/03/23(Wed) 16:34:12)
    No58005 (コアラ主任 さん) に返信

    ASCキーコードで送信というのは
    文字で送信するなら"A"を送ればいいし
    バイナリで送信するなら&H41(byteデータ)を送ればいいのであって
    "&H41"という文字列を送ってはいけません。
記事No.58005 のレス /過去ログ97より / 関連記事表示
削除チェック/

■58016  Re[2]: ASCコードで受け取るサーバに送信したい
□投稿者/ コアラ主任 -(2011/03/23(Wed) 22:36:03)
    No58006 (shu さん) に返信
    > ■No58005 (コアラ主任 さん) に返信
    >
    > ASCキーコードで送信というのは
    > 文字で送信するなら"A"を送ればいいし
    > バイナリで送信するなら&H41(byteデータ)を送ればいいのであって
    > "&H41"という文字列を送ってはいけません。

    ご返答ありがとうございます。
    -----------------------------------------------------
    Dim sdatB(10) As byte

    sdatB(1) = &H41
    lngRet = send(mlngSock, ByVal sdatB, Len(sdatC), 0)
    -----------------------------------------------------

    と言う事でしょうか・・・。

記事No.58005 のレス /過去ログ97より / 関連記事表示
削除チェック/

■58017  Re[3]: ASCコードで受け取るサーバに送信したい
□投稿者/ shu -(2011/03/23(Wed) 22:39:07)
    No58016 (コアラ主任 さん) に返信
    
    > -----------------------------------------------------
    > Dim sdatB(10) As byte
    > 
    > sdatB(1) = &H41 
    > lngRet = send(mlngSock, ByVal sdatB, Len(sdatC), 0)
    > -----------------------------------------------------
    > 
    > と言う事でしょうか・・・。
    
    sdatB(0) = &H41 
          ^
    で
    Len(sdatC)は1
    
記事No.58005 のレス /過去ログ97より / 関連記事表示
削除チェック/

■58020  Re[4]: ASCコードで受け取るサーバに送信したい
□投稿者/ コアラ主任 -(2011/03/23(Wed) 23:17:26)
    No58017 (shu さん) に返信
    > ■No58016 (コアラ主任 さん) に返信
    >
    >>-----------------------------------------------------
    >>Dim sdatB(10) As byte
    >>
    >>sdatB(1) = &H41
    >>lngRet = send(mlngSock, ByVal sdatB, Len(sdatC), 0)
    >>-----------------------------------------------------
    >>
    >>と言う事でしょうか・・・。
    >
    > sdatB(0) = &H41
    > ^
    > で
    > Len(sdatC)は1
    >

    早速のご返答ありがとうございます。
    コーディング、コピペミスがありましたが・・・、
    複数文字を送信する場合は、
    -----------------------------------------------------
    Dim sdatB(10) As byte

    sdatB(0) = &H41
    sdatB(1) = &H42
    lngRet = send(mlngSock, ByVal sdatB, 2, 0)
    -----------------------------------------------------
    という事になるかと思ったのですが、sendのsdatBが
    「型が一致しません」とコンパイルエラーになってしまいました。
    宣言を見ると第2引数は「buf As Any」となっています。
    デバッグをしていただくようで申し訳ありません。
    よろしければ、よろしくお願いいたします。

    Private Declare Function send Lib "wsock32.dll" (ByVal s As Long, buf As Any, ByVal lngLenlen As Long, ByVal flags As Long) As Long



記事No.58005 のレス /過去ログ97より / 関連記事表示
削除チェック/

■58023  Re[5]: ASCコードで受け取るサーバに送信したい
□投稿者/ コアラ主任 -(2011/03/24(Thu) 00:57:27)
    No58020 (コアラ主任 さん) に返信
    > ■No58017 (shu さん) に返信
    >>■No58016 (コアラ主任 さん) に返信
    >>
    > >>-----------------------------------------------------
    > >>Dim sdatB(10) As byte
    > >>
    > >>sdatB(1) = &H41
    > >>lngRet = send(mlngSock, ByVal sdatB, Len(sdatC), 0)
    > >>-----------------------------------------------------
    > >>
    > >>と言う事でしょうか・・・。
    >>
    >>sdatB(0) = &H41
    >> ^
    >>で
    >>Len(sdatC)は1
    >>
    >
    > 早速のご返答ありがとうございます。
    > コーディング、コピペミスがありましたが・・・、
    > 複数文字を送信する場合は、
    > -----------------------------------------------------
    > Dim sdatB(10) As byte
    >
    > sdatB(0) = &H41
    > sdatB(1) = &H42
    > lngRet = send(mlngSock, ByVal sdatB, 2, 0)
    > -----------------------------------------------------
    > という事になるかと思ったのですが、sendのsdatBが
    > 「型が一致しません」とコンパイルエラーになってしまいました。
    > 宣言を見ると第2引数は「buf As Any」となっています。
    > デバッグをしていただくようで申し訳ありません。
    > よろしければ、よろしくお願いいたします。
    >
    > Private Declare Function send Lib "wsock32.dll" (ByVal s As Long, buf As Any, ByVal lngLenlen As Long, ByVal flags As Long) As Long
    >

    《自己レス》
    ---------------------------------------------------------
    Dim sdatc As String

    sdatc = ChrB(&H41) + ChrB(0) + ChrB(&H42) + ChrB(0)
    lngRet = send(mlngSock, ByVal sdatc, 2, 0)
    ---------------------------------------------------------
    テスト環境で行うと「AB」と言うデータを受け取っているのですが、
    ASCコードにて受け取る環境では、正しく、解読できるのでしょうか・・・。
    (※今、一歩、コードと言うものを理解できていない・・・。)
記事No.58005 のレス /過去ログ97より / 関連記事表示
削除チェック/

■58026  Re[6]: ASCコードで受け取るサーバに送信したい
□投稿者/ shu -(2011/03/24(Thu) 07:55:11)
    No58023 (コアラ主任 さん) に返信

    >>Private Declare Function send Lib "wsock32.dll" (ByVal s As Long, buf As Any, ByVal lngLenlen As Long, ByVal flags As Long) As Long
    buf as Any => Byref buf as byte


    > Dim sdatB(10) As byte
    >
    > sdatB(0) = &H41
    > sdatB(1) = &H42
    > lngRet = send(mlngSock, ByVal sdatB, 2, 0)
    send(mlngSock, sdatB(0), 2, 0)

    でどうでしょう?



    >>
    >
    > 《自己レス》
    > ---------------------------------------------------------
    > Dim sdatc As String
    >
    > sdatc = ChrB(&H41) + ChrB(0) + ChrB(&H42) + ChrB(0)
    > lngRet = send(mlngSock, ByVal sdatc, 2, 0)
    > ---------------------------------------------------------
    > テスト環境で行うと「AB」と言うデータを受け取っているのですが、
    > ASCコードにて受け取る環境では、正しく、解読できるのでしょうか・・・。
    > (※今、一歩、コードと言うものを理解できていない・・・。)
    >
    文字列ならこれで2->4にすればいいと思いますが、これだと文字の間にnullが入りますがそういう仕様ですか?

記事No.58005 のレス /過去ログ97より / 関連記事表示
削除チェック/

■58029  Re[7]: ASCコードで受け取るサーバに送信したい
□投稿者/ コアラ主任 -(2011/03/24(Thu) 09:33:01)
    No58026 (shu さん) に返信
    > ■No58023 (コアラ主任 さん) に返信
    >
    > >>Private Declare Function send Lib "wsock32.dll" (ByVal s As Long, buf As Any, ByVal lngLenlen As Long, ByVal flags As Long) As Long
    > buf as Any => Byref buf as byte
    >
    >
    >>Dim sdatB(10) As byte
    >>
    >>sdatB(0) = &H41
    >>sdatB(1) = &H42
    >>lngRet = send(mlngSock, ByVal sdatB, 2, 0)
    > send(mlngSock, sdatB(0), 2, 0)
    >
    > でどうでしょう?
    >
    >
    >
    > >>
    >>
    >>《自己レス》
    >>---------------------------------------------------------
    >>Dim sdatc As String
    >>
    >>sdatc = ChrB(&H41) + ChrB(0) + ChrB(&H42) + ChrB(0)
    >>lngRet = send(mlngSock, ByVal sdatc, 2, 0)
    >>---------------------------------------------------------
    >>テスト環境で行うと「AB」と言うデータを受け取っているのですが、
    >>ASCコードにて受け取る環境では、正しく、解読できるのでしょうか・・・。
    >>(※今、一歩、コードと言うものを理解できていない・・・。)
    >>
    > 文字列ならこれで2->4にすればいいと思いますが、これだと文字の間にnullが入りますがそういう仕様ですか?
    >
    >

    度々のご返答ありがとうございます。

    > send(mlngSock, sdatB(0), 2, 0)
    >
    > でどうでしょう?
    はい、ありがとうございました。
    テスト環境ですが、「AB」と受信されたのを確認しました。

    > 文字列ならこれで2->4にすればいいと思いますが、これだと文字の間にnullが入りますがそういう仕様ですか?
    こちらは、平行し、調べていた、とあるページにVBは、バイト型は、文字列で
    送信しないといけないと書いてあった一部を見て、そこを参照し、作成してみました。
    バイト型を文字列にするの逆の操作を記述しました。
    >sdatc = ChrB(&H41) + ChrB(0) + ChrB(&H42) + ChrB(0)
    >lngRet = send(mlngSock, ByVal sdatc, 2, 0)
    これで、先ほどと同じようにテスト環境で「AB」と受信されているよう
    画面上は、見えます。
    かつ、送信データ長は、「2」のままです。
    逆にchrb(0)を外し、「ChrB(&H41) + ChrB(&H42)」として、送信すると
    受信側では「?」と表示されて、受信されています。
    そして、Chrb(0)を入れても、画面上には、上記のバイト配列で送信したのと
    同じように「AB」と隙間なく、受信されているように見えます。
    ASCコードを受け取る環境でも、同じデータして、認識されるのでしょうか・・・。

記事No.58005 のレス /過去ログ97より / 関連記事表示
削除チェック/

■58078  Re[8]: ASCコードで受け取るサーバに送信したい
□投稿者/ Azulean -(2011/03/24(Thu) 22:53:58)
    2011/03/24(Thu) 22:56:53 編集(投稿者)

    No58029 (コアラ主任 さん) に返信
    > ASCコードを受け取る環境でも、同じデータして、認識されるのでしょうか・・・。

    その環境を持ち、実験できる人にしかわかりません。
    第三者に「認識されるのでしょうか」と問うたところで、される・されないの回答は不可能です。
    本番環境や客先環境と言った事情で、気軽に試せないのなら、試せる環境を作りだしてください。
    -----
    VB は一応 Unicode 環境なので、ChrB(&H41) & ChrB(&H42) を String 型に入れた時点で別の文字になります。
    (UTF-16 においてはアルファベットでも 1 文字を 2 バイトで表す。2 バイトに満たない場合は文字化けて当然です)
    「ASC コード」が何を指しているかわかりませんが、ASCII コードなのであれば、ChrB(&H41) & CHrB(&H42) を AB と解釈するのでしょう。(コード表は見直してないので数値の間違いは確認してません)
    こういったバイト列を送りつけるのであれば、String 型ではなく、Byte 型配列として渡すようにすべきです。

    テスト環境が Byte 配列を受け取ってそのまま String に入れているのであれば、そもそもそのテスト環境自体が間違っている可能性があります。
    ASCII で受け取ったデータを String に入れるには Unicode に変換しなければいけないのですから。
記事No.58005 のレス /過去ログ97より / 関連記事表示
削除チェック/

■58087  Re[9]: ASCコードで受け取るサーバに送信したい
□投稿者/ 774RR -(2011/03/25(Fri) 09:23:23)
    String と byte の違いを正しく認識してるのかどうかが不明なのでなんともいえないが
    とりあえず以下の項目は理解できているのだろうか?

    文字セット:どの文字を使い、どの文字は見捨てるのかの合意
    (例:JIS第一水準とか常用漢字とか)
    文字コード:(文字セット中にある)特定1文字に割り振るコード
    (例:ひらがなの「あ」に対して JIS X 0208 は 004 区 02 点というコードを割り振っている)
    符号化方式:文字コードをプログラム上やデータ上で具体的にどう表現するか
    (「あ」の 004 区 02 点 というコードを、SHIFT-jis では 0x82A0 と表現し EUC-jp では 0xA4A2 と表現する)

    ASC コードというのは俺も知らないのだが、仮に ASCII であるとして。
    ASCII は 1960 年代に作られた代物で、上記文字セット・文字コード・符号化方式を
    (意識的な区別をせず)同時に含むもの。
    A という文字に対して、文字コード=表現方式として 7bit 二進数1000001 を使う。
    最近のコンピュータは 7bit データを扱うのが苦手なので、最上位ビットに 0 を補い
    8bit のデータ 0x41 として扱うのが普通になっている。

    これに対して VB は[文字]として 文字セット:UNICODE 符号化方式:UTF-16 を使う。
    VB の String は [文字](の列) を扱うものなので、当然 UTF-16 符号化方式である。
    UTF-16 と ASCII では表現方式が違うので変換が必要。

    ASCII の 0x41 は UNICODE の U+0041 文字になり、 UTF-16 表現すると 0x0041
    ASCII の 0x41 0x42 という [ASCII の文字の列] を
    UTF-16 の 0x0041 0x0042 (UNICODE の U+0041 U+0042) と変換するのか
    UTF-16 の 0x4142 (UNICODE の U+4142) と変換するのか
    UTF-16 の 0x4241 (UNICODE の U+4241) と変換するのか
    そういうあたりは常に意識しておかないとバグっちゃうぞ。
記事No.58005 のレス /過去ログ97より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -