2010-05-19 26 views
0

여러 클라이언트가 한 서버와 동시에 통신 할 수있는 클라이언트 서버 시스템을 개발해야합니다. xml 직렬화 된 객체를 전달하고 메소드를 호출하기 위해 다른 명령을 보내고 받아야합니다. 자, C#과 .Net에서 소켓 프로그래밍을 시작하면서 비동기 입출력이 코드의 실행을 차단하지 않도록하는 방법임을 알게되었습니다. 또한 방법의 많은 예가 있습니다여러 클라이언트 - 하나의 서버와 소켓 연결 tcp/ip C# .net

간단한 클라이언트 서버 시스템을 만드십시오. 그래서 저는 그것이 어떻게 작동하는지에 대한 기본적인 이해를 가지고 있습니다.

어쨌든, 나에게 아직 불명확 한 점은 여러 클라이언트에 대한 연결을 관리 할 수있는 서버를 설정하는 방법입니다. 연결 당 새 소켓을 만든 다음이를 일종의 목록에 저장할 수 있습니까? 이를 달성하기 위해 일종의 멀티플렉싱이 필요합니까? 여러 포트에서 수신 대기해야합니까? 여기서 가장 좋은 방법은 무엇입니까?

그리고 다른 점은 네트워크를 통해 실제로 무엇을 보내고 있는지를 구분하기 위해 자체 프로토콜을 개발해야하는 경우입니다.> xml 직렬화 된 개체 또는 ascII 등으로 인코딩 된 문자열 일 수있는 명령입니다. 아니면이 명령을 보내기 위해 자체 프로토콜을 개발할 것인가?

모든 종류의 도움을받을 수 있습니다. 누군가이 물건을 다루는 좋은 책을 알고 있다면 알려주세요. 건배

나는 얘기를 깜빡 했네요 그 PDA 될 것입니다 내 서버와 통신하는데 내가 때문에 컴팩트 프레임 워크를 사용 ... 그래서이 일부 제한에 가져올 수 있습니다 내 고객 ... 일부

답변

2

당신 특히 수신 대기 서버가 새 클라이언트 연결을 만드는 방법을 설명하는 using a socket as a server socket과 TCP/IP 프로토콜을 통한 XML에 대한 결정을 설명하는 XML over TCP/IP을 비롯한 여러 가지 TCP/IP .NET FAQ 항목을 유용하게 사용할 수 있습니다.

+0

위의 링크 u를 읽으십시오. 정말 유용했습니다. 내가 얻지 못한 것은 당신이 지방 항구에서 무엇을 의미합니까? 어떤 IP 주소에 대해서도 8221 번 포트에서 듣고 있습니다. 로컬 포트로 들어오는 연결을 처리하는 새 소켓을 어떻게 만들 수 있습니까? 클라이언트가 포트를 변경해야합니까, 아니면 어떻게 작동합니까? 감사합니다. – jagse

+0

사용되지 않는 로컬 포트에 바인드 된 새로운 소켓 생성과 클라이언트의 새로운 소켓으로의 마이그레이션은 모두 TCP/IP 스택에 의해 처리됩니다. 따라서 서버 코드에 관한 한 8221에서 계속 청취 할 수 있습니다. 클라이언트 코드에 관해서는 8221에 성공적으로 연결되어 있습니다 (실제로 서버의 TCP/IP 스택에 의해 선택된 동적 포트와 통신하지만). –

+0

내가 듣지 못하는 것은 내가 듣고있는 '서버 소켓'이 어떻게 새로 생성 된 소켓에 대한 연결을 전달할 수 있는지입니다. 소켓을 가지고 다음과 같이 BeginAccept를 호출하는 것이 좋습니다. socket.BeginAccept (new AsyncCallback (OnClientConnect), null); 내 OnClientConnect 콜백에서이 연결을 새 소켓에 전달하는 방법은 무엇입니까? – jagse

1

소켓을 사용하고 WCF Windows Communication Foundation으로 전환하겠다는 계획을 포기합니다. 훨씬 더 우아하고 .NET 소켓보다 훨씬 쉽고 간단한 방법으로 원하는 모든 것을 할 수 있습니다.

사용법에 대한 안내를 원하면 Michele Leroux Bustamante의 놀라운 Microsoft webcasts 세트가 있습니다.이 세트를 사용하면 곧바로 작동 할 수 있습니다.

+0

좋아. 나는 그것을 볼 것이다. 문제는 내 고객이 실제로 PDA이기 때문에 구현을 위해 Compact Framework를 사용할 때 몇 가지 방법으로 제한됩니다. 물론 서버는 PDA가 아닙니다. 그래서 나는 서버 구현을 위해 WCF를 사용할 수있을 것이다. 힌트를 보내 주셔서 감사합니다. – jagse

+0

이제 WCF도 소형 프레임 워크에서 사용할 수 있다는 것을 알았습니다. WCF에서 클라이언트의 데이터를 가져올 수 있습니까? – jagse

+0

물론입니다. 콜백을 사용하여 양방향 WCF를 설정할 수 있으므로 서버는 클라이언트에서 메서드를 호출 할 수 있습니다 (반환 매개 변수가있을 수 있음). WCF를 사용하여 많은 정보를 앞뒤로 보내는 클라이언트/서버 게임을 설정했습니다. 전혀 문제가되지 않습니다! – NibblyPig

관련 문제