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 に答える