2011-09-09 18 views
0

私はオフィスで使用していた古いライブラリの代わりに、ソケットを介して通信するためにソケットを介して行われるやや不器用で古いカスタムC++フレームワークと通信します他のシステムの束。問題は、非常に特殊な方法でフォーマットしなければならない文字列を含むプレーンテキストメッセージだけを受け取ることである。.NETのソケット経由でプレーンテキストを送信する

私が直面している問題は、これまでソケットを介してプレーンテキストを送信する方法が見つかっていないことです。ソケットのSendメソッドはバイト配列だけを受け取り、リスンポイントがデータを受け取っている間に完全にスクランブルされ、バイト配列をプレーンテキストに変換するために混乱させる方法はありません。バイト配列ではなくプレーンテキストを送る必要があります。

これは、Connectと私がこれまで持ってSendメソッドです:任意の助けが理解されるであろう

Public Sub Connect(Optional ByVal pHostName As String = "", Optional ByVal pPort As Integer = 0) 
    If pHostName.Trim <> "" Then mHostName = pHostName 
    If pPort > 0 Then mPort = pPort 

    Try 
     Dim ipep As IPEndPoint 

     If IsIPAddress(mHostName) Then 
      ipep = New IPEndPoint(IPAddress.Parse(mHostName), mPort) 
     Else 
      ipep = New IPEndPoint(IPAddress.Parse(Dns.GetHostEntry(mHostName).AddressList(0).ToString), mPort) 
     End If 
     mSocket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) 
     mSocket.Connect(CType(ipep, EndPoint)) 
     mState = eState.Connected 
     RaiseEvent Connected() 
     mDataTimer.Start() 
    Catch ex As Exception 
     Me.Close() 
     Throw ex 
    End Try 
End Sub 

Public Sub SendData(ByVal pBytes() As Byte) 
    mSocket.Send(pBytes) 
End Sub 

Public Sub SendString(ByVal pString As String) 
    Dim bytes() As Byte = System.Text.Encoding.UTF8.GetBytes(pString) 
    mSocket.Send(bytes) 
End Sub 

+0

相手側のサービス/スクリプトまたはアプリケーションはありますか?もっと説明すると、私たちはあなたを助けることができます。 –

答えて

2

本当にユニコードを使用するべきですか?古いC++アプリケーションなので、エンコードは普通のであるか、またはiso-8559-1のような文字セットでなければなりません。

ソケットを使用しているときに「プレーンテキストとして送信」はありません。これは、常に使用されているバイトストリームです。古いアプリケーションは、受信したバイトを特定のエンコーディングを使って文字列として解釈するだけです。

+0

ありがとう、それはトリックでした!それはあまりにも簡単でした、どうして私はそれを考え出すことができませんでしたか? – reno812

関連する問題