2014-02-05 1 views
1

this 가이드를 기반으로 서버 및 클라이언트를 코딩하고 있습니다. 내 서버는 계속해서 일부 데이터를 클라이언트에 보냅니다. 클라이언트 중 하나가 예상치 못한 문제 (일반적으로 LAN 케이블 분리 또는 정전)로 인해 분리 할 때클라이언트가 연결을 끊으면 비동기 소켓 연결, 서버 GUI가 응답하지 않음 (응답하지 않음)?

모든 몇 초 동안 서버 GUI 중단 (응답하지)를 제외하고 잘 작동합니다. 다음 몇 초 동안 소켓 예외가 throw됩니다. 서버 컴퓨터에 앉아있는 사람이 편안하지 않습니다. 정전으로 인한 것이 아니라 클라이언트가 올바르게 연결을 끊으면 매달리기 문제가 발생하지 않습니다. 원인은 무엇입니까? 그 교수형을 없애는 방법?

답변

0

소켓, 연결 등에 별도의 스레드를 사용하십시오. 작업에 시간이 소요될 때 UI 스레드를 별도로 유지해야합니다.

스레드에 불편한 점이 있다면 Application.DoEvents() 메서드를 코드에 사용할 수 있습니다. 이 방법을 사용하지 않는 것이 좋습니다.

+0

멀티 스레드 C# 샘플 작업에 대한 링크를 제공 할 수 있습니까? 전체 작업 (서버 및 클라이언트 모두) 소스 코드가 포함되어 있으므로 codeguru 샘플을 사용했습니다. – user3000743

+0

[link] (http://www.codeproject.com/Articles/14346/A-Simple-Multi-Threaded-Server-Client-Instant-Mess) 당신은 이것을 시도 할 수 있습니다. codeguru가 멀티 스레딩을 사용하여 GUI가 멈추지 않도록합니다 ... 소켓이 타임 아웃 기간 동안 응답을 기다리는 것을 알아야합니다. GUI가 멈추거나 소켓 연결이 시간 초과를 기다리고 있는지 확인하십시오. –

+0

1 초 후에 소켓 연결을 시간 종료하는 방법은 무엇입니까? 해당 속성을 설정하는 방법? 내 사건이 몇 초 동안 멈춰. – user3000743

관련 문제