특정 포트에서 들어오는 데이터를 모니터링하기 위해 TCPListener 콘솔 앱을 만들어야합니다. 나는 잠시 검색하고 난 LINQPad를 통해 실행 다음과 같은 코드가 있습니다TCPListener가 새 연결을 차단합니다.
void Main()
{
IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
Console.WriteLine("Starting TCP listener...");
TcpListener listener = new TcpListener(ipAddress, 1005);
try
{
listener.Start();
while (true)
{
Socket client = listener.AcceptSocket();
client.ReceiveTimeout.Dump();
Console.WriteLine("Connection accepted.");
var childSocketThread = new Thread(() =>
{
Byte[] bytes = new Byte[256];
String data = null;
int i;
while((i = client.Receive(bytes))!=0 && data != "55AA")
{
data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
}
Console.WriteLine("connection closing");
client.Close();
//throw new Exception();
});
childSocketThread.Start();
}
listener.Stop();
}
catch (Exception e)
{
Console.WriteLine("Error: " + e.StackTrace);
Console.ReadLine();
}
}
이 실제로 구글의 예제 수백만의 약간 수정 된 코드입니다. 내 문제는 LINQPad에있는 것이 보통 실행 버튼을 누른 다음 명령 프롬프트를 열고 127.0.0.1
포트 1005로 텔넷을 연결 한 다음 모두 좋은 것을 씁니다.
나는 다음과 같은 오류와 끝까지 다시 실행 한 후 Enter 키를 누릅니다 LINQPad에서 정지 버튼을 누른 경우
Error: at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress) at System.Net.Sockets.Socket.Bind(EndPoint localEP) at System.Net.Sockets.TcpListener.Start(Int32 backlog) at System.Net.Sockets.TcpListener.Start() at UserQuery.Main() in c:\Users\giannis\AppData\Local\Temp\LINQPad_jncifzyi\query_lgowqr.cs:line 40
을 이제 난 당신이 하나의 클라이언트 만 listening
또는 using
특정 포트가있을 수 있음을 이해 ,하지만 내 문제는 그 중 첫 번째는 LINQPad 실제 솔루션으로 이동하기 전에 놀고 싶습니다. TCPListener 변수를 전역 변수로 만들 수 있고 프로그램을 종료 할 때 처리 할 수 있다는 것을 알고 있습니다. 하지만 충돌이 생기면 어떨까요? 로그온을 로그 오프 할 때까지 포트에 연결할 수 없게 될까요?
솔직히 말해서 여기에 대한 답변을 기다리는 동안 나는 정확하게 그 일을 시작했고 프로젝트를 시작했습니다. 그리고 그것은 모두 괜찮은 것 같습니다 :-). 하지만 평소에 놀아서 바로 개발을 시작하지 않으려 고 할 때 LINQPad는 제 친구입니다. 그런 경우에는 아닐 수도 있습니다. –
나는 청취자를 멈추기 위해 응용 프로그램의 종료를 처리 할 필요가 없다. –
어쨌든'using'으로 리소스를 포장해야합니다. 그게 너를 구해 줄 수 있을지도 모른다. – usr