2017-09-27 23 views
0

私はシンプルなTCPサーバを開発しています。私はStreamWriterクラスを使用してクライアントと通信するには、のようなので:コンソールアプリケーションはWindowsで動作し、Linuxではモノラルではありません

client.ClientWriter.WriteLine(command); 
client.ClientWriter.Flush(); 

コマンドは、行終端System.Environment.NewLine続く単一の単語、です。私のクライアント(LUAで書かれた)、このようなコマンドをチェック:

if data:find("INIT") then DoSomething() 
elseif data:find("START") then DoSomethingElse() 
... 
else SendResponse("BAD REQUEST") 

私はVS2017を使用して、元のアプリを開発しました。私はWindowsマシン上でそれを実行すると、アプリは完全に動作します。

しかし、Monoを実行しているLinuxに自分のアプリケーションを配備する必要があります。 Linuxでアプリをテストしたところ、クライアントに送信したコマンドはすべて認識されず、"BAD REQUEST"が返されました。 Windowsマシンで問題を再現できませんでした。

EDIT:いくつかのテストの後、mono 4.2.1を実行しているKubuntuでプログラムを実行できます。しかし私はまだモノを実行している私の他のマシン(私が展開する必要があるマシン)で実行することはできません4.2.3。

この問題の原因は何ですか?

+1

ラインターミネータが原因である可能性があります。 Windowsでは "\ r \ n"はUnix上では単に "\ n"です。 –

+4

このようなエラーを避けるには、常にC#で 'System.Environemt.NewLine'を使用してください。 – waka

+0

LUAクライアントが実際に受け取ったもの(通常「デバッグ」と呼ばれています)を確認しましたか? –

答えて

0

この問題は、より大きな何かの兆候でしかないことが判明しました。タスクからコマンドを読み込みます。私が使っているMono(バージョン4.1.3)には、いくつかのTasksの開始を妨げるバグがあるので、私は明示的にThreadを宣言しました。

関連する問題