2012-07-27 3 views
1

메신저로 C#에서 간단한 클라이언트/서버 응용 프로그램을 작성했습니다. 코드에서 if (cSocket.Connected) 태그가있는 것을 보면 알 수 있습니다 ... cSocket 연결이 끊어진 경우 ... 코드를 제공 할 것이므로 제목과 내 문제를 이해할 수 있습니다. 설명 ...클라이언트 측 연결 끊기 감지 및 쓰기

다음은 코드입니다.

서버;

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Net; 
using System.Net.Sockets; 
using System.IO; 

namespace ConsoleApplication1 
{ 
class Program 
{ 
    static void Main(string[] args) 
    { 
     TcpListener sSocket = new TcpListener(System.Net.IPAddress.Any, 3162); 
     int Counter = 0; 
     Console.ForegroundColor = ConsoleColor.Green; 
     Console.WriteLine("\n >> Server Started!"); 
     sSocket.Start(); 
     while (true) 
     { 
      Socket cSocket = sSocket.AcceptSocket(); 
      NetworkStream NetworkStr = new NetworkStream(cSocket); 
      BinaryReader bReader = new BinaryReader(NetworkStr); 
      BinaryWriter bWriter = new BinaryWriter(NetworkStr); 
      IPEndPoint remoteIpEndPoint = cSocket.RemoteEndPoint as IPEndPoint; 

      if (cSocket.Connected) 
      { 
       Counter = Counter + 1; 
       Console.ForegroundColor = ConsoleColor.Yellow; 
       Console.WriteLine("\n >> Client Connected! ~ Total: " + Counter + " ~ [" + remoteIpEndPoint + "]"); 
       bWriter.Write("\n >> Server Says: You Connected to Me!"); 
      } 
     } 
    } 
} 

주셔서 감사합니다 도움을 위해 :

+0

당신이 연결 ** 무엇을 의미합니까 **를? 연결된 소켓에서 초기 NetworkStream 수 있습니다. (AcceptSocket 반환 할 때 이미 소켓 연결되어 의미) – hmmftg

답변

0

내가 .NET 것들로하지만 (IP/TCP 포함) 이론의 응용 프로그램과 프로토콜에 익숙한하지 않다가 대기하는 시간 제한의 일종. TCP/IP 프로토콜 패밀리와 마찬가지로 한쪽은 패키지를 보낸 후 일정 시간 동안 다른 한쪽을 기다리고 응답을받지 못하면 그는 다시 시도하거나 연결을 닫습니다.

요약하면 짧은 요청을 정기적으로 보내고 클라이언트가 응답하는지 확인할 수 있습니다.

0

OPI는 saied으로 이런 일이 (그것은 유래의 다른 답변에서이다) 할 것입니다 :

public static bool SocketConnected(Socket s) 
     { 
      if (!s.Connected) return false; 
      bool part1 = s.Poll(1000, SelectMode.SelectRead); 
      bool part2 = (s.Available == 0); 
      if (part1 & part2) 
       return false; 
      return true; 
     } 
+0

vb있는 winsock 컨트롤을 의미하고 "닫기"이벤트가 있지만 C#, i 같은 이벤트가 없습니다. 귀하의 코드 :) 귀하의 도움을 주셔서 감사합니다 사용합니다 ... –

관련 문제