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

感谢您的帮助:)

4

2 回答 2

1

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

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

于 2012-07-27T01:39:01.663 回答
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;
        }
于 2012-07-27T01:46:18.083 回答