MSMQ 서비스를 탐색 중이며 각 클라이언트의 키 입력을 서버로 보내는 간단한 콘솔 클라이언트 - 서버 응용 프로그램을 작성했습니다. 제어 문자 (DEL
, ESC
, INS
등)를 치면 서버가 당연히 오류를 던집니다. 그러나 공백 문자를 입력 할 때마다 서버는 패킷을 받지만 오류는 발생시키지 않으며 공백을 표시하지 않습니다.MSMQ에서 공백 문자를 보내지 않는 이유는 무엇입니까?
서버 :
namespace QIM
{
class Program
{
const string QUEUE = @".\Private$\qim";
static MessageQueue _mq;
static readonly object _mqLock = new object();
static XmlSerializer xs;
static void Main(string[] args)
{
lock (_mqLock)
{
if (!MessageQueue.Exists(QUEUE))
_mq = MessageQueue.Create(QUEUE);
else
_mq = new MessageQueue(QUEUE);
}
xs = new XmlSerializer(typeof(string));
_mq.BeginReceive(new TimeSpan(0, 1, 0), new object(), OnReceive);
while (Console.ReadKey().Key != ConsoleKey.Escape) { }
}
static void OnReceive(IAsyncResult result)
{
Message msg;
lock (_mqLock)
{
try
{
msg = _mq.EndReceive(result);
Console.Write(".");
Console.Write(xs.Deserialize(msg.BodyStream));
}
catch (Exception ex)
{
Console.Write(ex);
}
}
_mq.BeginReceive(new TimeSpan(0, 1, 0), new object(), OnReceive);
}
}
}
클라이언트 :
namespace QIM_Client
{
class Program
{
const string QUEUE = @".\Private$\qim";
static MessageQueue _mq;
static void Main(string[] args)
{
if (!MessageQueue.Exists(QUEUE))
_mq = MessageQueue.Create(QUEUE);
else
_mq = new MessageQueue(QUEUE);
ConsoleKeyInfo key = new ConsoleKeyInfo();
while (key.Key != ConsoleKey.Escape)
{
key = Console.ReadKey();
_mq.Send(key.KeyChar.ToString());
}
}
}
}
클라이언트 입력 :
테스트, 테스트 ...
서버 출력 :
.Testing .. 테스트 .....
당신은, 공백 문자 메시지를 보내는 것을 알 수 있지만 문자 ISN ' 표시됩니다.
제안 : 예외적으로 식사를 중단하십시오. 빈 catch 블록을 없애고 어떤 예외가 던져지고 있는지 확인할 수 있습니다. –
전화하세요. 공백 문자는 예외를 보내지 않습니다. 'BeginReceive' 타임 아웃과'MessageQueueExceptions'와'XmlExceptions'를 각각 보내는 제어 문자들. – dlras2
완벽한 예외 사항을 게시 하시겠습니까? –