Добрый день или вечер! У меня такая проблема: Есть 1000 примерно серверов к которым я подключаюсь и беру некоторую информацию Подключение находится как бы в отдельном потоке, но когда достигает примерно говоря 140-го сервера, то соединение с интернетом просто зависает. Очень похоже на забитость канала.
Используется вот такой класс для соединения
namespace SampQueryApi
{
class SampQuery
{
IPAddress serverIp;
IPEndPoint serverEndPoint;
Socket svrConnect;
string IP;
ushort Port;
bool bDebug = false;
DateTime TransmitMS = new DateTime();
DateTime ReceiveMS = new DateTime();
public SampQuery(string ip, ushort port, char packet_type, bool console_debug = false)
{
MemoryStream stream = new MemoryStream();
BinaryWriter writer = new BinaryWriter(stream);
try
{
serverIp = new IPAddress(IPAddress.Parse(ip).GetAddressBytes());
serverEndPoint = new IPEndPoint(serverIp, port);
svrConnect = new Socket(serverEndPoint.AddressFamily, SocketType.Dgram, ProtocolType.Udp);
svrConnect.SendTimeout = 5000;
svrConnect.ReceiveTimeout = 5000;
IP = ip;
Port = port;
bDebug = console_debug;
if (bDebug)
Console.Write("Соединение к "/*Connecting to*/ + ip + ":" + port + Environment.NewLine);
try
{
using (stream)
{
using (writer)
{
string[] szSplitIP = IP.ToString().Split('.');
writer.Write("SAMP".ToCharArray());
writer.Write(Convert.ToByte(Convert.ToInt16(szSplitIP[0])));
writer.Write(Convert.ToByte(Convert.ToInt16(szSplitIP[1])));
writer.Write(Convert.ToByte(Convert.ToInt16(szSplitIP[2])));
writer.Write(Convert.ToByte(Convert.ToInt16(szSplitIP[3])));
writer.Write(Port);
writer.Write(packet_type);
if (bDebug) Console.Write("Передающий пакет '"/*Transmitting Packet*/ + packet_type + "'" + Environment.NewLine);
TransmitMS = DateTime.Now; // To get ping (ms to reach back & forth to the svr)
}
}
svrConnect.SendTo(stream.ToArray(), serverEndPoint);
}
catch (Exception e)
{
if (bDebug) Console.Write($"Не удалось получить пакет: {e}"); //Console.Write("Failed to receive packet:", e);
}
}
catch (Exception e)
{
if (bDebug) Console.Write($"Не удалось подключиться к IP: {e}"); //Console.Write("Failed to connect to IP:", e);
}
}
//------------------------------------------------------------------------------------------
Dictionary<string, string> dData = new Dictionary<string, string>();
public Dictionary<string, string> Read(bool flushdata = true)
{
try
{
serverIp = new IPAddress(IPAddress.Parse(IP).GetAddressBytes());
serverEndPoint = new IPEndPoint(serverIp, Port);
EndPoint rawPoint = serverEndPoint;
byte[] szReceive = new byte[2048];
svrConnect.ReceiveFrom(szReceive, ref rawPoint);
svrConnect.Close();
ReceiveMS = DateTime.Now;
if (flushdata)
dData.Clear();
string ping = ReceiveMS.Subtract(TransmitMS).Milliseconds.ToString();
MemoryStream stream = new MemoryStream(szReceive);
BinaryReader read = new BinaryReader(stream, System.Text.Encoding.Default);
using (stream)
{
using (read)
{
read.ReadBytes(10);
switch (read.ReadChar())
{
case 'i':
dData.Add("password", Convert.ToString(read.ReadByte()));
dData.Add("players", Convert.ToString(read.ReadInt16()));
dData.Add("maxplayers", Convert.ToString(read.ReadInt16()));
dData.Add("hostname", new string(read.ReadChars(read.ReadInt32())));
dData.Add("gamemode", new string(read.ReadChars(read.ReadInt32())));
dData.Add("language", new string(read.ReadChars(read.ReadInt32())));
dData.Add("ping", ping.ToString()); //Дополнительный ключ для более удобного использования
break;
case 'r':
for (int i = 0, iRules = read.ReadInt16(); i < iRules; i++)
dData.Add(new string(read.ReadChars(read.ReadByte())), new string(read.ReadChars(read.ReadByte())));
break;
case 'c':
for (int i = 0, iPlayers = read.ReadInt16(); i < iPlayers; i++)
dData.Add(new string(read.ReadChars(read.ReadByte())), Convert.ToString(read.ReadInt32()));
break;
case 'd':
for (int i = 0, iTotalPlayers = read.ReadInt16(); i < iTotalPlayers; i++)
{
string id = Convert.ToString(read.ReadByte());
dData.Add(id + ".name", new string(read.ReadChars(read.ReadByte())));
dData.Add(id + ".score", Convert.ToString(read.ReadInt32()));
dData.Add(id + ".ping", Convert.ToString(read.ReadInt32()));
}
break;
case 'p':
dData.Add("ping", ping.ToString());
break;
}
}
}
}
catch (SocketException SockEx)
{
if (bDebug)
Console.Write("Проблема с чтением данных ({0})" + Environment.NewLine/*There's been a problem reading the data*/, SockEx.ErrorCode);
}
return dData;
}
}
}
В чем может быть причина, что интернет зависает? Лишь через некоторое время от 2 до 5 минут, интернет опять начинает работать
Имеется канва на которой я могу рисовать квадраты, а их соединять линиямиТакже я могу выделять эти квадраты и перетаскивать как захочу, и соответственно...
Добрый деньРеализовал вероятностный алгоритм определение простоты числа на основе малой теоремы Ферма
Хочу сохранять при закрытии формы данные в файл и потом загружатьПри сохранении все сохраняется, а при открытии не загружается