我在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 :(得分: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;
}