客户端断开连接时检测和写入

时间:2012-07-27 00:52:33

标签: c# sockets client-server disconnect

我在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!");
            }
        }
    }
 }

感谢您的帮助:)

2 个答案:

答案 0 :(得分:0)

我并不熟悉.NET的东西,但理论上应用程序和协议(包括TCP / IP)有一些等待的超时。就像在TCP / IP协议族中一样,一方在发送包之后等待另一方一段时间,如果他没有得到答案,他会再次尝试和/或在一段时间后关闭连接。

简而言之,您可以定期发送一个小请求,并检查客户是否回答。

答案 1 :(得分:0)

正如Opi所说的那样会做到这一点(来自StackOverFlow中的另一个答案):

 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;
        }