2009-10-05 4 views
2

Socket 클래스를 사용하여 액션 스크립트 3 플래시 게임과 통신하는 소켓 서버를 작성했습니다. 이것은 TCP 연결입니다. 서버가 보내는 메시지가 저수준으로 처리되므로 100 % 확신 할 수 있습니다. 따라서 전송에 실패하면 메시지를 다시 보냅니다.Actionscript TCP 소켓이 일부 사용자에게 메시지를 보내지 못했습니다.

내 빌드를 테스트 한 다른 두 사람의 경우에도 마찬가지입니다. 그러나 때로는 (드물지만 무시할 수없는) 한 사람이 메시지를 서버에서 수신하지 못하는 경우도 있습니다. 다른 사람의 시스템에서는 발생하지 않는 것으로 보입니다. 그러나이 사람은 다른 전문 멀티 플레이어 게임에 전혀 문제가 없으므로 내 빌드에서 문제가되어야합니다.

메시지가 올바르게 전송되고 있는지 확인하기 위해 할 수있는 일이 있습니까? 저급 수준의 실패시 메시지가 다시 전송되기 때문에 TCP가 100 % 안전하지 않습니까?

+0

일부 사용자가 서버에 전혀 연결할 수 없거나 연결할 수 있지만 서버에서 보낸 일부 데이터를받지 못한다는 것을 의미합니까? – Amarghosh

+0

나는 클라이언트가 서버에 연결할 수 없거나 서버로부터 메시지를 수신 할 수 없다는 것에 대해 아무 말도하지 않는다고 생각합니다. 수신 부분은 괜찮습니다. 그러나 한 사람의 클라이언트가 가끔 원래 게시물에서 말한 것처럼 서버에 메시지를 보내지 못했습니다. – Tom

+0

명확히하기 : 나는 3 인 (나 자신, 사람 A와 사람 B)과 실험했다. 사람 A와 나는 항상 메시지를 성공적으로 보낼 수 있습니다. 그러나 어떤 이유로 사람 B의 메시지가 때로는 서버에 수신되지 않습니다. – Tom

답변

3

언제든지 tcpdump 또는 wireshark으로 게임을 할 수 있습니다. 이벤트가 TCP/IP 수준이 아닌 경우 이러한 이벤트는 너무 유용한 네트워크 문제 해결 도구로 배우지 않아도됩니다. 이미 중요한 단계가 될 것 AS3 소켓의 클라이언트 나 서버 부분에서 문제를 분리 할 수있는 경우

+0

이것은 플래시이며 따라서 소켓 인터페이스를 제어 할 수 없습니다. 그것은 제대로 작동해야하지만 아주 드문 경우는 아닙니다. 이 문제에 대해 알고있는 사람들이 있어야하며 그 원인을 알 수 있어야합니다. – Tom

1

봅니다 nc

과 사람 B에서 서버에 (자신의 프로토콜 사용) 메시지를 보낼 수 있습니다.

참고 : 몇 달 전 프로젝트에서 Actionscript3 소켓을 성공적으로 사용했지만 도메인 정책 서버를 올바르게 설정하는 것이 약간 까다 롭습니다.

미친 생각 :이 옵션으로 커널을 다시 컴파일 할 수 있습니까? 네트워크 패킷 드롭 경고 서비스 (NET_DROP_MONITOR) 면책 조항 : 나는 이것을 시도한 적이 없다 ..

+0

불행히도 나는 사람 B의 컴퓨터에 액세스 할 수 없습니다. 다시 말하지만이 사람이 멀티 플레이어 게임과 같은 다른 UDP 종속 응용 프로그램을 사용할 수 있기 때문에 이것이 사람 B의 측면에서 어떻게 문제가되는지는 알 수 없습니다. 내가 필요한 위치에있을 때 액션 스크립트 코드를 게시 할 것이다. – Tom

+0

UDP와 TCP는 매우 다른 동물입니다. 당신은 실제로 어떤 것을 사용하고 있습니까? –

2

당신은 TCP의 종류에 대해 잘 알고 있습니다. TCP는 데이터를 쓸 수있는 응용 프로그램에 데이터 스트림을 제공합니다.이 데이터 스트림은 도착하여 도착하게됩니다. 그것은 연결이 죽지 않는다고 가정 할 때, 또는 과정입니다. 니콜라이 (Nikolai)가 정확한 정보가 사실 정확한 주소로 보내지는지 확인하기 위해 제안한 것처럼 wireshark와 같은 프로그램을 사용하는 것이 좋습니다. 그런 다음 서버에서 wireshark를 사용하여 동일한 작업을 수행합니다. 사람 A와 다른 사람 B의 특징이 있습니까? (무선 등)

5

이 문제는 일반적인 문제이지만 문제는 일반적으로 플래시와 관련이 없습니다. 메시지를 보냈지 만받지 못했습니다. 어떻게해야합니까? 클라이언트 코드가 실제로 메시지를 보냈는지 확인해야합니다. 메시지가 클라이언트 시스템을 떠나지 않았는지 확인해야합니다. 메시지가 서버 시스템에 도달했는지 확인해야합니다. 서버 응용 프로그램이 메시지를 수신했는지 확인해야합니다. 또한 클라이언트와 서버 간의 연결/소켓이 아직 활성 상태인지 확인해야합니다.

이 문제를 진단하는 데 TCP가 실패했다고 가정 할 때 시작하는 것이 잘못되었습니다. UDP를 사용하고 있다면 UDP가 배달을 보장하지 않기 때문에 이야기가 달라집니다 (단, 이미 알고 있다는 것을 알고 계시겠습니까?).

이전 제안 사항을 반복하면 메시지가 클라이언트 컴퓨터에서 나가는 지 확인하기 위해 Wireshark (또는 동급)를 사용해야합니다.서버에서 시작하여 재미있는 일이 일어나지 않도록 할 수 있습니다. 그러나 서버 측에 메시지의 흔적이 없다면 클라이언트 측 계측을 제공해야합니다.

+0

더 많은 조사를 해본 결과, 메시지가 전송되고 서버에서 수신되었지만 내가 말한 플레이어가 수신하지 못하는 경우 (100 % 확신 할 수 없음) 다른 클라이언트의 서버에서 업데이트 나는 이것이 무엇을 일으키는 지 전혀 모릅니다. 그것은 저나 다른 누군가를 위해 시도한 것이 아닙니다. – Tom

+0

문제 정의를 좁히기위한 Upvote – Karthik

관련 문제