Нароооод, всем добрейшего денька) У меня встала проблема, а точнее у меня не принимаются пакеты с сервера, если он не на localhost. Суть ошибки в том, что клиент не может подключиться к серверу с IPv4:... Я тут сижу недоумеваю, так ещё и во время отладки заметил, что сервер потребляет от ГБ и больше ОЗУ! (Мне кажется, что дело здесь в буфере, но я его очищал и ничего).
p.s. Создаю прогу для захвата экрана юзера с использованием Window Duplicate и костылей, ниже приведу код сервера/клиента (будет работать только, если ip=127.0.0.1). Заранее спасибо тем, кто решит в этом покопаться) И да, firewall вырублен
p.s. без niggaтива, пожалуйста. Я знаю, что дурень :)
Код сервера
using System;
using System.Net.Sockets;
using System.Net;
using System.Windows;
using System.Threading.Tasks;
using System.Windows.Threading;
using System.Collections.Generic;
using System.Text.RegularExpressions;
namespace TheTomas
{
class DataSender
{
public static TcpListener SERV;
const int PORT = 19152;
public static void Start()
{
DispatcherTimer waitForSend = new DispatcherTimer();
waitForSend.Start();
waitForSend.Interval = TimeSpan.FromMilliseconds(60);
waitForSend.Tick += new EventHandler(async (object s, EventArgs e) => {
byte[] data = CaptureScreen.GetFrame();
bool isSend = await _sendScreen(data);
if (!isSend) Console.WriteLine("BULLSHIT!");
});
}
private static async Task<bool> _sendScreen(byte[] imgData)
{
try
{
if (SERV is null)
{
IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Any, PORT); // Ставлю тут, чтобы принимало все ip-шники и не работает, даже если так же буду к 127.0.0.1 коннектиться
// Init network
SERV = new TcpListener(ipEndPoint);
}
// Start server
SERV.Start();
// Send client
TcpClient client = await SERV.AcceptTcpClientAsync().ConfigureAwait(false);
if (client != null)
{
int result = await client.Client.SendAsync(imgData, SocketFlags.Truncated);
if (result > 0)
{
client.Dispose();
client.Close();
SERV.Stop();
GC.Collect();
}
} else
{
client.Close();
SERV.Stop();
GC.Collect();
}
return client != null;
}
catch (Exception e)
{
MessageBox.Show($"Some error accure {e.Message}");
return false;
}
}
private static string _getIP()
{
WebClient wc = new WebClient();
string strIP = wc.DownloadString("http://checkip.dyndns.org");
strIP = (new Regex(@"\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b")).Match(strIP).Value;
wc.Dispose();
return strIP;
}
}
}
Код клиента
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Net.Sockets;
using System.Net;
using System.Runtime.InteropServices;
namespace GayAppClient
{
public partial class Client : Form
{
const uint SRCCOPY = 0x00CC0020;
const int PORT = 19152;
public static string IP = "127.0.0.1";
public Client()
{
InitializeComponent();
}
private void demoPause_Tick(object sender, EventArgs e)
{
try
{
_getIP(); // - Получаем IP сервера(моего роутера т.е)
TcpClient tcp = new TcpClient(IP, PORT); // IP тут 127.0.0.1; когда пишу ipv4 роутера, к которому подключен ПК(сервер) - ошибка
NetworkStream stream = tcp.GetStream();
captureView.Image = Image.FromStream(stream);
captureView.SizeMode = PictureBoxSizeMode.StretchImage;
GC.Collect();
} catch (Exception ex)
{
demoPause.Stop();
DialogResult ans = MessageBox.Show(ex.Message);
if (ans == DialogResult.OK)
{
Application.Exit();
}
}
}
private static void _getIP()
{
WebClient wc = new WebClient();
string strIP = wc.DownloadString("http://checkip.dyndns.org");
strIP = (new Regex(@"\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b")).Match(strIP).Value;
wc.Dispose();
IP = strIP;
}
}
}