그래서 TcpClient를 사용하여 서버에서 데이터를 보내고받는 시스템을 만들려고합니다. 내가 스레드가 데이터에 오심을 듣고있다멀티 스레드 콜백
는 내가 원하는 것은 할 수있는 방법을 만들 수있을 것입니다 :.> 스트림에
이쓰기 응답> 프로세스의 응답을 기다립니다
그러나 동시에, 다른 관련없는 데이터는이 기간 동안 올 수 있습니다, 그래서 난 그냥 수행 할 수 없습니다
writer.WriteLine("");
string response = reader.ReadLine();
내가이 질문>Callbacks in C#에 '콜백'를 찾고 있었어요 그리고이 나는 것 같아 내가 갈 필요가있는 방법이지만, 내가 어떻게이 일을 계속할 수 있는지 완전히 확신 할 수는 없다.
도움이되면 도움이됩니다. 짐 Mischel에 대한
는편집 :
public bool Login(string username, string password) {
writer.Write("{ \"username\" : \"" + username + "\", \"password\" : \"" + password + "\" }";
//Somehow get the response which is being ran on another thread (See below)
//Process the JSON into a object and check is successful or not
if (msg.result == "Ok") return true;
else return false;
}
private void ReadThread()
{
while (running)
{
if (ns.DataAvailable)
{
string msg = reader.ReadLine();
if (String.IsNullOrEmpty(msg)) continue;
Process(msg); //Process the message aka get it back to the Login method
}
}
}
편집 : 2 : 은 기본적으로 내가 로그인 메소드를 호출 할 수 있도록하려면
이 내가 달성하고자하는 물건의 종류는 TcpClient에 쓰고 같은 스트림에서 응답을 받기를 기다린 다음 부울 값을 반환합니다.
그러나 같은 기본적인 방법은 그래서 그것을 잘라하지 않을 :
public bool Login(string username, string password) {
writer.Write("{ \"username\" : \"" + username + "\", \"password\" : \"" + password + "\" }";
string response = reader.ReadLine();
if (response == "success") return true;
else return false;
}
이 작동하지 않을 다른 데이터가 자동으로 나에게 스트림을 통해 밀어 도착하기 때문에, 그래서에서는 ReadLine()에 기다릴 때, I 내가 찾는 응답 대신에 다른 것을 얻을 수 있습니다.
그래서이 문제를 해결할 수있는 솔루션을 찾고 있는데, 현재는 스트림에서 읽기 전용으로 실행중인 스레드가 있고 메시지를 처리하기 위해이 스레드로 메시지를 가져와야합니다. 위의 방법.
내가 생각하는 한 가지 방법은 전역 목록에 넣기 위해 메시지가 읽힐 때입니다. 그러면 로그인 메서드가 목록에서 메시지가 발견 될 때까지 List를 검사하는 루프에 넣을 수 있습니다 . 그러나 내가 생각할 때면, 이것은 끔찍한 개념입니다. 그래서 나는 대안을 찾고 있습니다.
C# 5 (.NET 4.5)를 보증 할 수 있습니까? 'async/await'는 여러분의 경우에 딱 맞는 소리처럼 들리며 동기식으로 코드를 개발할 수있게 해줍니다. –
.Net 4가 내가 가야 할 가장 높은 것이 었으면 좋겠다. 이것이 최후의 수단이 될 것이다. –
Microsoft.Bcl.Async Nuget 패키지를 참조하고 C# 5 컴파일러를 사용하여 .NET 4를 사용할 수도 있습니다. – jods