From 7e69486d056cae54a82e621d60cfc8fb2ad6a72b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=A8=E9=9B=A8=20=E5=AE=8B?= Date: Wed, 22 Jan 2020 14:18:29 +0800 Subject: [PATCH] 1 --- Client/App.xaml | 9 + Client/App.xaml.cs | 17 ++ Client/AssemblyInfo.cs | 10 + Client/Client.csproj | 13 ++ Client/MainWindow.xaml | 38 ++++ Client/MainWindow.xaml.cs | 74 ++++++ Client/Socket/Map/Hosts.cs | 144 ++++++++++++ Client/Socket/Models/ClientModel.cs | 21 ++ Client/Socket/PortMap.cs | 73 ++++++ FrameClient/App.xaml | 17 ++ FrameClient/App.xaml.cs | 39 ++++ FrameClient/FrameClient.csproj | 175 ++++++++++++++ FrameClient/MainWindow.xaml | 102 +++++++++ FrameClient/MainWindow.xaml.cs | 123 ++++++++++ FrameClient/Page/MessageBoxOK.xaml | 27 +++ FrameClient/Page/MessageBoxOK.xaml.cs | 28 +++ FrameClient/Properties/AssemblyInfo.cs | 55 +++++ FrameClient/Properties/Resources.Designer.cs | 63 +++++ FrameClient/Properties/Resources.resx | 120 ++++++++++ FrameClient/Properties/Settings.Designer.cs | 26 +++ FrameClient/Properties/Settings.settings | 7 + FrameClient/Socket/Map/Hosts.cs | 194 ++++++++++++++++ FrameClient/Socket/Models/ClientModel.cs | 62 +++++ FrameClient/Util/LogHelper.cs | 39 ++++ FrameClient/Util/OtherHelper.cs | 70 ++++++ FrameClient/Util/PortHelper.cs | 191 ++++++++++++++++ FrameClient/app.config | 3 + FrameClient/ico.ico | Bin 0 -> 16958 bytes FrameClient/img/1.jpg | Bin 0 -> 196089 bytes FrameClient/packages.config | 5 + PortMap.sln | 43 ++++ Server/.config/dotnet-tools.json | 12 + .../Controllers/WeatherForecastController.cs | 39 ++++ Server/Program.cs | 26 +++ Server/Properties/launchSettings.json | 30 +++ Server/Server.csproj | 12 + Server/Socket/Map/Client.cs | 215 ++++++++++++++++++ Server/Socket/Map/Hosts.cs | 36 +++ Server/Socket/Models/ServerModel.cs | 47 ++++ Server/Startup.cs | 50 ++++ Server/WeatherForecast.cs | 15 ++ Server/appsettings.Development.json | 9 + Server/appsettings.json | 10 + Util/KeyHelper.cs | 18 ++ Util/LogHelper.cs | 14 ++ Util/PortHelper.cs | 137 +++++++++++ Util/Util.csproj | 7 + 47 files changed, 2465 insertions(+) create mode 100644 Client/App.xaml create mode 100644 Client/App.xaml.cs create mode 100644 Client/AssemblyInfo.cs create mode 100644 Client/Client.csproj create mode 100644 Client/MainWindow.xaml create mode 100644 Client/MainWindow.xaml.cs create mode 100644 Client/Socket/Map/Hosts.cs create mode 100644 Client/Socket/Models/ClientModel.cs create mode 100644 Client/Socket/PortMap.cs create mode 100644 FrameClient/App.xaml create mode 100644 FrameClient/App.xaml.cs create mode 100644 FrameClient/FrameClient.csproj create mode 100644 FrameClient/MainWindow.xaml create mode 100644 FrameClient/MainWindow.xaml.cs create mode 100644 FrameClient/Page/MessageBoxOK.xaml create mode 100644 FrameClient/Page/MessageBoxOK.xaml.cs create mode 100644 FrameClient/Properties/AssemblyInfo.cs create mode 100644 FrameClient/Properties/Resources.Designer.cs create mode 100644 FrameClient/Properties/Resources.resx create mode 100644 FrameClient/Properties/Settings.Designer.cs create mode 100644 FrameClient/Properties/Settings.settings create mode 100644 FrameClient/Socket/Map/Hosts.cs create mode 100644 FrameClient/Socket/Models/ClientModel.cs create mode 100644 FrameClient/Util/LogHelper.cs create mode 100644 FrameClient/Util/OtherHelper.cs create mode 100644 FrameClient/Util/PortHelper.cs create mode 100644 FrameClient/app.config create mode 100644 FrameClient/ico.ico create mode 100644 FrameClient/img/1.jpg create mode 100644 FrameClient/packages.config create mode 100644 PortMap.sln create mode 100644 Server/.config/dotnet-tools.json create mode 100644 Server/Controllers/WeatherForecastController.cs create mode 100644 Server/Program.cs create mode 100644 Server/Properties/launchSettings.json create mode 100644 Server/Server.csproj create mode 100644 Server/Socket/Map/Client.cs create mode 100644 Server/Socket/Map/Hosts.cs create mode 100644 Server/Socket/Models/ServerModel.cs create mode 100644 Server/Startup.cs create mode 100644 Server/WeatherForecast.cs create mode 100644 Server/appsettings.Development.json create mode 100644 Server/appsettings.json create mode 100644 Util/KeyHelper.cs create mode 100644 Util/LogHelper.cs create mode 100644 Util/PortHelper.cs create mode 100644 Util/Util.csproj diff --git a/Client/App.xaml b/Client/App.xaml new file mode 100644 index 0000000..ab673d9 --- /dev/null +++ b/Client/App.xaml @@ -0,0 +1,9 @@ + + + + + diff --git a/Client/App.xaml.cs b/Client/App.xaml.cs new file mode 100644 index 0000000..1d01910 --- /dev/null +++ b/Client/App.xaml.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Data; +using System.Linq; +using System.Threading.Tasks; +using System.Windows; + +namespace Client +{ + /// + /// Interaction logic for App.xaml + /// + public partial class App : Application + { + } +} diff --git a/Client/AssemblyInfo.cs b/Client/AssemblyInfo.cs new file mode 100644 index 0000000..8b5504e --- /dev/null +++ b/Client/AssemblyInfo.cs @@ -0,0 +1,10 @@ +using System.Windows; + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located + //(used if a resource is not found in the page, + // or application resource dictionaries) + ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located + //(used if a resource is not found in the page, + // app, or any theme specific resource dictionaries) +)] diff --git a/Client/Client.csproj b/Client/Client.csproj new file mode 100644 index 0000000..bd0bda5 --- /dev/null +++ b/Client/Client.csproj @@ -0,0 +1,13 @@ + + + + WinExe + netcoreapp3.1 + true + + + + + + + \ No newline at end of file diff --git a/Client/MainWindow.xaml b/Client/MainWindow.xaml new file mode 100644 index 0000000..a9b7812 --- /dev/null +++ b/Client/MainWindow.xaml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + diff --git a/FrameClient/Page/MessageBoxOK.xaml.cs b/FrameClient/Page/MessageBoxOK.xaml.cs new file mode 100644 index 0000000..d6c855c --- /dev/null +++ b/FrameClient/Page/MessageBoxOK.xaml.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace FrameClient.Page +{ + /// + /// MessageBoxOK.xaml 的交互逻辑 + /// + public partial class MessageBoxOK : UserControl + { + public MessageBoxOK() + { + InitializeComponent(); + } + } +} diff --git a/FrameClient/Properties/AssemblyInfo.cs b/FrameClient/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..10a1148 --- /dev/null +++ b/FrameClient/Properties/AssemblyInfo.cs @@ -0,0 +1,55 @@ +using System.Reflection; +using System.Resources; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Windows; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("FrameClient")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("FrameClient")] +[assembly: AssemblyCopyright("Copyright © 2020")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 会使此程序集中的类型 +//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +//若要开始生成可本地化的应用程序,请设置 +//.csproj 文件中的 CultureYouAreCodingWith +//例如,如果您在源文件中使用的是美国英语, +//使用的是美国英语,请将 设置为 en-US。 然后取消 +//对以下 NeutralResourceLanguage 特性的注释。 更新 +//以下行中的“en-US”以匹配项目文件中的 UICulture 设置。 + +//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //主题特定资源词典所处位置 + //(未在页面中找到资源时使用, + //或应用程序资源字典中找到时使用) + ResourceDictionaryLocation.SourceAssembly //常规资源词典所处位置 + //(未在页面中找到资源时使用, + //、应用程序或任何主题专用资源字典中找到时使用) +)] + + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值 +//通过使用 "*",如下所示: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/FrameClient/Properties/Resources.Designer.cs b/FrameClient/Properties/Resources.Designer.cs new file mode 100644 index 0000000..29e9449 --- /dev/null +++ b/FrameClient/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本:4.0.30319.42000 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FrameClient.Properties { + using System; + + + /// + /// 一个强类型的资源类,用于查找本地化的字符串等。 + /// + // 此类是由 StronglyTypedResourceBuilder + // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 + // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen + // (以 /str 作为命令选项),或重新生成 VS 项目。 + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// 返回此类使用的缓存的 ResourceManager 实例。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("FrameClient.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 重写当前线程的 CurrentUICulture 属性 + /// 重写当前线程的 CurrentUICulture 属性。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/FrameClient/Properties/Resources.resx b/FrameClient/Properties/Resources.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/FrameClient/Properties/Resources.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FrameClient/Properties/Settings.Designer.cs b/FrameClient/Properties/Settings.Designer.cs new file mode 100644 index 0000000..0ebf371 --- /dev/null +++ b/FrameClient/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本:4.0.30319.42000 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace FrameClient.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.4.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/FrameClient/Properties/Settings.settings b/FrameClient/Properties/Settings.settings new file mode 100644 index 0000000..033d7a5 --- /dev/null +++ b/FrameClient/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/FrameClient/Socket/Map/Hosts.cs b/FrameClient/Socket/Map/Hosts.cs new file mode 100644 index 0000000..806e383 --- /dev/null +++ b/FrameClient/Socket/Map/Hosts.cs @@ -0,0 +1,194 @@ +using FrameClient.Socket.Models; +using FrameClient.Util; +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Net; +using System.Net.Sockets; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace FrameClient.Socket.Map +{ + public class Hosts + { + public ObservableCollection connectMaps = new ObservableCollection(); + public NetworkStream kz = null; + + public int serverport = 4999; //外网主服务端口 + public string outip = "port.jiyiwm.cn"; //外网IP + public string outip1; //连接外网的IP + + public int outport; //外网端口 + public int inport; //内网端口 + public string inip; //内网IP + public TcpClient tc; //控制器 + + public int state = 0; //运行状态 + + /// + /// 启动 + /// + /// 外网IP + public async Task Start(string ip) + { + outip = ip; + tc = new TcpClient(); + try { await tc.ConnectAsync(outip, serverport); } + catch { throw new Exception("无法连接到" + ip); } + kz = tc.GetStream(); + string[] s = { + "check", + Res.version, + Environment.OSVersion.ToString(), + Environment.MachineName, + Environment.UserName, + OtherHelper.GetInfo(), + }; + await kz.H_Send(string.Join(",", s)); + string[] ss = (await kz.H_RecvAsync()).Split(','); + if (ss[0] == "0") + { + throw new Exception(ss[1]); + } + + } + + /// + /// 打开端口 + /// + /// 内网IP + /// 内网端口 + /// 外网对外端口 + /// + public async Task Open(string ip, string port1, string port2) + { + try + { + inport = Convert.ToInt32(port1); + inip = ip; + TcpClient tc1 = new TcpClient(inip, inport); + tc1.Close(); + + string[] ss = { + "1", + port2, + inip, + inport.ToString(), + }; + await kz.H_Send(string.Join(",", ss)); + string s = await kz.H_RecvAsync(); + string[] r = s.Split(','); + if (r[0] == "0") + { + throw new Exception($"{outip}服务器的{port2}端口已经被占用"); + } + else if (r[0] == "10") + { + outip1 = r[1]; + new Thread(StartLisen) { IsBackground = true }.Start(); + } + else + { + throw new Exception("返回数据未知"); + } + } + catch (Exception e) + { + throw new Exception("连接发生错误" + e.Message); + } + } + + public void CheckConnect() + { + foreach (var l in connectMaps) + { + if (!l.InClient.Connected || !l.OutClient.Connected) + { + l.InClient.Close(); + l.InClient.Dispose(); + l.OutClient.Close(); + l.OutClient.Dispose(); + l.State = 0; + } + } + + List ss = connectMaps.Where(l => l.State == 0).ToList(); + ss.ForEach(l => Dis(() => + { + connectMaps.Remove(l); + SetIndex(); + })); + } + + /// + /// 关闭服务 + /// + public async Task Close() + { + await kz.H_Send($"0"); + kz.Dispose(); + tc.Close(); + } + + /// + /// 开启监听 + /// + private void StartLisen() + { + try + { + while (true) + { + string s = kz.H_Recv(); + string[] r = s.Split(','); + if (r[0] == "1") + { + outport = Convert.ToInt32(r[1]); + TcpClient tc1 = new TcpClient(inip, inport); + TcpClient tc2 = new TcpClient(outip, outport); + ConnectMap connectMap = new ConnectMap { InClient = tc1, OutClient = tc2, Outip = outip1 }; + Dis(() => + { + connectMaps.Add(connectMap); + SetIndex(); + }); + + PortHelper.Lianjie(connectMap); + } + } + } + catch (Exception ex) + { + LogHelper.Logger("客户端开启监听出错 " + ex.Message); + kz.Dispose(); + tc.Close(); + } + } + + + private void SetIndex() + { + int i = 1; + foreach (var l in connectMaps) + { + l.Index = i++; + } + } + + private void Dis(Action action) + { + ThreadPool.QueueUserWorkItem(delegate + { + SynchronizationContext.SetSynchronizationContext(new + System.Windows.Threading.DispatcherSynchronizationContext(System.Windows.Application.Current.Dispatcher)); + SynchronizationContext.Current.Post(pl => + { + action(); + }, null); + }); + } + } +} diff --git a/FrameClient/Socket/Models/ClientModel.cs b/FrameClient/Socket/Models/ClientModel.cs new file mode 100644 index 0000000..ec6e738 --- /dev/null +++ b/FrameClient/Socket/Models/ClientModel.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Net.Sockets; +using System.Runtime.CompilerServices; +using System.Text; + +namespace FrameClient.Socket.Models +{ + public class ConnectMap: ViewModelBase + { + private int @in = 0; + private int @out = 0; + + + public string Outip { get; set; } + public DateTime StartTime { get; set; } = DateTime.Now; + + public TcpClient InClient { get; set; } + + public TcpClient OutClient { get; set; } + + public int In + { + get => @in; set + { + @in = value; + PCEH(); + } + } + public int Out + { + get => @out; set + { + @out = value; + PCEH(); + } + } + public int State { get; set; } = 1; + + public string ID { get; set; } = Guid.NewGuid().ToString("N"); + + public int Index { get; set; } + } + + public class ViewModelBase : INotifyPropertyChanged + { + public event PropertyChangedEventHandler PropertyChanged; + /// + /// 通知界面更新指定属性名 + /// + /// + public void PC(string propertyName) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + + /// + /// 通知界面更新指定属性名(属性名由调用方法获取) + /// + /// + public void PCEH([CallerMemberName] string propertyName = null) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + + } +} diff --git a/FrameClient/Util/LogHelper.cs b/FrameClient/Util/LogHelper.cs new file mode 100644 index 0000000..d6dd4df --- /dev/null +++ b/FrameClient/Util/LogHelper.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; + +namespace FrameClient.Util +{ + public static class LogHelper + { + public static void Logger(string s) + { + + try + { + string path = Path.Combine("./logs"); + if (!Directory.Exists(path)) Directory.CreateDirectory(path); + + string logFileName = Environment.CurrentDirectory + "\\logs\\" + DateTime.Now.ToString("yyyy_MM_dd") + ".log";//生成日志文件 + if (!File.Exists(logFileName)) File.Create(logFileName).Close(); //判断日志文件是否为当天 + StreamWriter writer = File.AppendText(logFileName);//文件中添加文件流 + writer.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " " + s); + writer.Flush(); + writer.Close(); + } + catch (Exception e) + { + string path = Path.Combine("./log"); + if (!Directory.Exists(path)) Directory.CreateDirectory(path); + string logFileName = path + "\\pt" + DateTime.Now.ToString("yyyy-MM-dd") + ".log"; + if (!File.Exists(logFileName)) File.Create(logFileName); + StreamWriter writer = File.AppendText(logFileName); + writer.WriteLine(DateTime.Now.ToString("日志记录错误HH:mm:ss") + " " + e.Message + " " + s); + writer.Flush(); + writer.Close(); + } + + } + } +} diff --git a/FrameClient/Util/OtherHelper.cs b/FrameClient/Util/OtherHelper.cs new file mode 100644 index 0000000..8206d54 --- /dev/null +++ b/FrameClient/Util/OtherHelper.cs @@ -0,0 +1,70 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Management; +using System.Security.Cryptography; +using System.Text; +using System.Threading.Tasks; + +namespace FrameClient.Util +{ + public static class OtherHelper + { + /// + /// 获取本计算机唯一的机器码 + /// + /// 字符串形式的机器码 + public static string GetInfo() + { + string unique = ""; + // 获取处理器信息 + ManagementClass cimobject = new ManagementClass("Win32_Processor"); + ManagementObjectCollection moc = cimobject.GetInstances(); + foreach (ManagementObject mo in moc) + { + unique += mo.Properties["ProcessorId"].Value.ToString(); + } + // 获取硬盘ID + ManagementClass cimobject1 = new ManagementClass("Win32_DiskDrive"); + ManagementObjectCollection moc1 = cimobject1.GetInstances(); + foreach (ManagementObject mo in moc1) + { + unique += (string)mo.Properties["Model"].Value; + break; + } + + // 获取BIOS + ManagementObjectSearcher searcher = + new ManagementObjectSearcher("Select SerialNumber From Win32_BIOS"); + ManagementObjectCollection moc2 = searcher.Get(); + + if (moc2.Count > 0) + { + foreach (ManagementObject share in moc2) + { + unique += share["SerialNumber"].ToString(); + } + } + + MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider(); + return ByteToHexString(md5.ComputeHash(Encoding.Unicode.GetBytes(unique)), (char)0).Substring(0, 25); + } + + + public static string ByteToHexString(byte[] InBytes, char segment) + { + StringBuilder sb = new StringBuilder(); + foreach (byte InByte in InBytes) + { + if (segment == 0) sb.Append(string.Format("{0:X2}", InByte)); + else sb.Append(string.Format("{0:X2}{1}", InByte, segment)); + } + + if (segment != 0 && sb.Length > 1 && sb[sb.Length - 1] == segment) + { + sb.Remove(sb.Length - 1, 1); + } + return sb.ToString(); + } + } +} diff --git a/FrameClient/Util/PortHelper.cs b/FrameClient/Util/PortHelper.cs new file mode 100644 index 0000000..7639899 --- /dev/null +++ b/FrameClient/Util/PortHelper.cs @@ -0,0 +1,191 @@ +using FrameClient.Socket.Models; +using System; +using System.Net; +using System.Net.NetworkInformation; +using System.Net.Sockets; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace FrameClient.Util +{ + public static class PortHelper + { + /// + /// 检测端口是否使用 + /// + /// + /// + public static bool PortInUse(int port) + { + bool inUse = false; + + IPGlobalProperties ipProperties = IPGlobalProperties.GetIPGlobalProperties(); + IPEndPoint[] ipEndPoints = ipProperties.GetActiveTcpListeners(); + + foreach (IPEndPoint endPoint in ipEndPoints) + { + if (endPoint.Port == port) + { + inUse = true; + break; + } + } + + return inUse; + } + + /// + /// 获取第一个可用的端口号 + /// + /// + public static int GetFirstAvailablePort() + { + int MAX_PORT = 6000; //系统tcp/udp端口数最大是65535            + int BEGIN_PORT = 5000;//从这个端口开始检测 + + for (int i = BEGIN_PORT; i < MAX_PORT; i++) + { + if (!PortInUse(i)) return i; + } + + return -1; + } + + /// + /// 发送 + /// + /// + /// + public static async Task H_Send(this NetworkStream ns, string s) + { + byte[] bt = Encoding.UTF8.GetBytes(s);//这里发送一个连接提示 + await ns.WriteAsync(bt, 0, bt.Length); + } + + /// + /// 接收 + /// + /// + /// + public static async Task H_RecvAsync(this NetworkStream ns) + { + byte[] bt = new byte[10240]; + int count = await ns.ReadAsync(bt, 0, bt.Length); + if (count == 0) throw new Exception("连接断开"); + return Encoding.UTF8.GetString(bt, 0, count); + } + + /// + /// 接收 + /// + /// + /// + public static string H_Recv(this NetworkStream ns) + { + byte[] bt = new byte[10240]; + int count = ns.Read(bt, 0, bt.Length); + if (count == 0) throw new Exception("连接断开"); + return Encoding.UTF8.GetString(bt, 0, count); + } + + /// + /// 建立连接 + /// + /// + /// + public static void Lianjie(ConnectMap connectMap) + { + connectMap.InClient.SendTimeout = 300000; + connectMap.InClient.ReceiveTimeout = 300000; + connectMap.OutClient.SendTimeout = 300000; + connectMap.OutClient.ReceiveTimeout = 300000; + ThreadPool.QueueUserWorkItem(new WaitCallback(Transfer), connectMap); + ThreadPool.QueueUserWorkItem(new WaitCallback(Transfer1), connectMap); + } + + /// + /// 转发 + /// + /// + public static void Transfer(object obj) + { + try + { + TcpClient tc1 = ((ConnectMap)obj).InClient; + TcpClient tc2 = ((ConnectMap)obj).OutClient; + NetworkStream ns1 = tc1.GetStream(); + NetworkStream ns2 = tc2.GetStream(); + while (true) + { + try + { + byte[] bt = new byte[10240]; + int count = ns1.Read(bt, 0, bt.Length); + if (count == 0) throw new Exception("连接断开"); + ns2.Write(bt, 0, count); + ((ConnectMap)obj).In += count; + //LogHelper.Logger("发送 " + BitConverter.ToString(bt, 0, count) + count.ToString()); + } + catch (Exception ex) + { + ns1.Dispose(); + ns2.Dispose(); + tc1.Close(); + tc2.Close(); + tc1.Dispose(); + tc2.Dispose(); + LogHelper.Logger("连接关闭 " + ex.Message); + break; + } + } + } + catch (Exception ex) + { + LogHelper.Logger("内网主动断开 " + ex.Message); + } + } + + /// + /// 转发 + /// + /// + public static void Transfer1(object obj) + { + try + { + TcpClient tc2 = ((ConnectMap)obj).InClient; + TcpClient tc1 = ((ConnectMap)obj).OutClient; + NetworkStream ns1 = tc1.GetStream(); + NetworkStream ns2 = tc2.GetStream(); + while (true) + { + try + { + byte[] bt = new byte[10240]; + int count = ns1.Read(bt, 0, bt.Length); + if (count == 0) throw new Exception("连接断开"); + ns2.Write(bt, 0, count); + ((ConnectMap)obj).Out += count; + //LogHelper.Logger("接收 " + BitConverter.ToString(bt, 0, count) + count.ToString()); + } + catch (Exception ex) + { + ns1.Dispose(); + ns2.Dispose(); + tc1.Close(); + tc2.Close(); + tc1.Dispose(); + tc2.Dispose(); + LogHelper.Logger("外网主动断开 " + ex.Message); + break; + } + } + } + catch (Exception ex) + { + LogHelper.Logger("转发方法出错 " + ex.Message); + } + } + } +} diff --git a/FrameClient/app.config b/FrameClient/app.config new file mode 100644 index 0000000..312bb3f --- /dev/null +++ b/FrameClient/app.config @@ -0,0 +1,3 @@ + + + diff --git a/FrameClient/ico.ico b/FrameClient/ico.ico new file mode 100644 index 0000000000000000000000000000000000000000..b97201d437549a25f298fe0dbeceb681a4858f4e GIT binary patch literal 16958 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 MB*0q{?O%2CKgW}TNdN!< literal 0 HcmV?d00001 diff --git a/FrameClient/img/1.jpg b/FrameClient/img/1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..69aec05aca3491b7b8b7bf59f4f9898485b5662a GIT binary patch literal 196089 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

B|`QHDaJ3yQ^*DP5-Kg~-&k2kJn&C#MW+Y% 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Μ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

4qh9vUp;u143p+Exaan(b%U2ygzCnE+~VUM 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 + + + + \ No newline at end of file diff --git a/PortMap.sln b/PortMap.sln new file mode 100644 index 0000000..b2e195a --- /dev/null +++ b/PortMap.sln @@ -0,0 +1,43 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29613.14 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Client", "Client\Client.csproj", "{E7DF9A13-476F-4873-A84F-E4F4D19663BF}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Server", "Server\Server.csproj", "{731C4200-C66F-457D-B14C-26C97BE7CC07}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Util", "Util\Util.csproj", "{DB69D4FF-5082-480B-96A2-E895E26487EA}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FrameClient", "FrameClient\FrameClient.csproj", "{283B2089-261B-4948-BFE7-5AC2D54052F7}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E7DF9A13-476F-4873-A84F-E4F4D19663BF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E7DF9A13-476F-4873-A84F-E4F4D19663BF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E7DF9A13-476F-4873-A84F-E4F4D19663BF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E7DF9A13-476F-4873-A84F-E4F4D19663BF}.Release|Any CPU.Build.0 = Release|Any CPU + {731C4200-C66F-457D-B14C-26C97BE7CC07}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {731C4200-C66F-457D-B14C-26C97BE7CC07}.Debug|Any CPU.Build.0 = Debug|Any CPU + {731C4200-C66F-457D-B14C-26C97BE7CC07}.Release|Any CPU.ActiveCfg = Release|Any CPU + {731C4200-C66F-457D-B14C-26C97BE7CC07}.Release|Any CPU.Build.0 = Release|Any CPU + {DB69D4FF-5082-480B-96A2-E895E26487EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DB69D4FF-5082-480B-96A2-E895E26487EA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DB69D4FF-5082-480B-96A2-E895E26487EA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DB69D4FF-5082-480B-96A2-E895E26487EA}.Release|Any CPU.Build.0 = Release|Any CPU + {283B2089-261B-4948-BFE7-5AC2D54052F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {283B2089-261B-4948-BFE7-5AC2D54052F7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {283B2089-261B-4948-BFE7-5AC2D54052F7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {283B2089-261B-4948-BFE7-5AC2D54052F7}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {14CE4704-2F8A-49BE-B579-ED1693A5A2D4} + EndGlobalSection +EndGlobal diff --git a/Server/.config/dotnet-tools.json b/Server/.config/dotnet-tools.json new file mode 100644 index 0000000..6b2cf2d --- /dev/null +++ b/Server/.config/dotnet-tools.json @@ -0,0 +1,12 @@ +{ + "version": 1, + "isRoot": true, + "tools": { + "dotnet-ef": { + "version": "3.1.0", + "commands": [ + "dotnet-ef" + ] + } + } +} \ No newline at end of file diff --git a/Server/Controllers/WeatherForecastController.cs b/Server/Controllers/WeatherForecastController.cs new file mode 100644 index 0000000..5ad0843 --- /dev/null +++ b/Server/Controllers/WeatherForecastController.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Logging; + +namespace Server.Controllers +{ + [ApiController] + [Route("[controller]")] + public class WeatherForecastController : ControllerBase + { + private static readonly string[] Summaries = new[] + { + "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" + }; + + private readonly ILogger _logger; + + public WeatherForecastController(ILogger logger) + { + _logger = logger; + } + + [HttpGet] + public IEnumerable Get() + { + var rng = new Random(); + return Enumerable.Range(1, 5).Select(index => new WeatherForecast + { + Date = DateTime.Now.AddDays(index), + TemperatureC = rng.Next(-20, 55), + Summary = Summaries[rng.Next(Summaries.Length)] + }) + .ToArray(); + } + } +} diff --git a/Server/Program.cs b/Server/Program.cs new file mode 100644 index 0000000..a3057b5 --- /dev/null +++ b/Server/Program.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; + +namespace Server +{ + public class Program + { + public static void Main(string[] args) + { + CreateHostBuilder(args).Build().Run(); + } + + public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .ConfigureWebHostDefaults(webBuilder => + { + webBuilder.UseStartup().UseUrls("http://0.0.0.0:4998"); + }); + } +} diff --git a/Server/Properties/launchSettings.json b/Server/Properties/launchSettings.json new file mode 100644 index 0000000..6c307e7 --- /dev/null +++ b/Server/Properties/launchSettings.json @@ -0,0 +1,30 @@ +{ + "$schema": "http://json.schemastore.org/launchsettings.json", + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:56454", + "sslPort": 0 + } + }, + "profiles": { + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "launchUrl": "weatherforecast", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "Server": { + "commandName": "Project", + "launchBrowser": true, + "launchUrl": "weatherforecast", + "applicationUrl": "http://localhost:5000", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/Server/Server.csproj b/Server/Server.csproj new file mode 100644 index 0000000..cf85de3 --- /dev/null +++ b/Server/Server.csproj @@ -0,0 +1,12 @@ + + + + netcoreapp3.1 + + + + + + + + diff --git a/Server/Socket/Map/Client.cs b/Server/Socket/Map/Client.cs new file mode 100644 index 0000000..3301083 --- /dev/null +++ b/Server/Socket/Map/Client.cs @@ -0,0 +1,215 @@ +using Server.Socket.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Net.Sockets; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Util; + +namespace Server.Socket.Map +{ + public class Client + { + public TcpClient tc; //主链接 + private NetworkStream ns;//主链接 + string key; + ServerModel serverModel; + + ///

+ /// 接收到客户端连接 + /// + /// + public void ClientConn() + { + ns = tc.GetStream(); + key = KeyHelper.GenerateKey(); + serverModel = new ServerModel + { + key = key, + MainClient = tc, + }; + Hosts.serverModels.Add(serverModel); + LogHelper.Logger(key + " :连接 " + (tc.Client.RemoteEndPoint as IPEndPoint).Address.ToString()); + while (true) + { + try + { + string s = ns.H_Recv(); + LogHelper.Logger(key + " :接收 " + s); + Analysis(s); + } + catch + { + DisClientConn(); + LogHelper.Logger(key + " :断开"); + break; + } + } + } + + /// + /// 解析数据 + /// 0,申请关闭服务 + /// 1,申请开启服务,带端口 + /// + /// + public void Analysis(string s) + { + string[] r = s.Split(','); + if (r[0] == "check") //验证 + { + if (r[1] != "1.0.0") + { + ns.H_Send("0,客户端版本过低,请更新版本"); + } + else + { + ns.H_Send("pass"); + } + } + else if (r[0] == "1") //申请开启服务 + { + int i = Convert.ToInt32(r[1]); + bool b = PortHelper.PortInUse(i); + if (b) //如果申请的端口正在使用 + { + ns.H_Send("0"); //拒绝 + } + else + { + ns.H_Send("10," + (tc.Client.RemoteEndPoint as IPEndPoint).Address.ToString()); //同意 + int p = PortHelper.GetFirstAvailablePort(); + serverModel.inport = p; + serverModel.outport = i; + new Thread(StartLisen1) { IsBackground = true }.Start(); + new Thread(StartLisen2) { IsBackground = true }.Start(); + } + } + else if (r[0] == "0") //申请关闭服务 + { + DisClientConn(); + } + } + + /// + /// 开启客户端口并监听 + /// + public void StartLisen1() + { + TcpListener tl = new TcpListener(IPAddress.Any, serverModel.inport); + serverModel.lisenClient = tl; + tl.Start(); + + while (true) + { + try + { + TcpClient tc = tl.AcceptTcpClient(); + //接收到连接 + serverModel.waitClient = tc; + } + catch + { + break; + } + } + } + + /// + /// 开启服务端口并监听 + /// + public void StartLisen2() + { + TcpListener tl = new TcpListener(IPAddress.Any, serverModel.outport); + serverModel.lisenClient1 = tl; + tl.Start(); + while (true) + { + try + { + TcpClient tc = tl.AcceptTcpClient(); + + serverModel.waitClient = null; + ns.H_Send($"1,{serverModel.inport}"); + int i = 0; + while (serverModel.waitClient == null) + { + Thread.Sleep(1); + i++; + if (i > 1000) throw new Exception("等待客户端失败"); + } + //接收到连接 + PortHelper.Lianjie(tc, serverModel.waitClient); + //检查连接情况 + CheckConnect(); + serverModel.connectMaps.Add(new ConnectMap + { + inClient = tc, + outClient = serverModel.waitClient + }); + + } + catch + { + break; + } + } + } + + private void CheckConnect() + { + serverModel.connectMaps.ForEach(l => + { + if (l.inClient.Connected && l.outClient.Connected) { } + else + { + l.inClient.Close(); + l.inClient.Dispose(); + l.outClient.Close(); + l.outClient.Dispose(); + l.state = 0; + } + }); + List ss = serverModel.connectMaps.Where(l => l.state == 0).ToList(); + ss.ForEach(l => + { + serverModel.connectMaps.Remove(l); + }); + } + + /// + /// 客户端退出,回收资源 + /// + /// + public void DisClientConn() + { + try + { + if (serverModel.state == 0) return; + if (serverModel == null) return; + serverModel.state = 0; + serverModel.connectMaps?.ForEach(l => + { + l.inClient.Close(); + l.inClient.Dispose(); + l.outClient.Close(); + l.outClient.Dispose(); + }); + serverModel.waitClient?.Close(); + serverModel.waitClient?.Dispose(); + serverModel.MainClient?.Close(); + serverModel.MainClient?.Dispose(); + serverModel.lisenClient?.Stop(); + serverModel.lisenClient1?.Stop(); + Hosts.serverModels.Remove(serverModel); + } + catch (Exception ex) + { + LogHelper.Logger("客户端退出,回收资源出错 " + ex.Message); + } + } + } +} diff --git a/Server/Socket/Map/Hosts.cs b/Server/Socket/Map/Hosts.cs new file mode 100644 index 0000000..c3bbdd6 --- /dev/null +++ b/Server/Socket/Map/Hosts.cs @@ -0,0 +1,36 @@ +using Server.Socket.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Net.Sockets; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Util; + +namespace Server.Socket.Map +{ + public class Hosts + { + /// + /// 主机列表 + /// + public static List serverModels = new List(); + + /// + /// 启动服务 + /// + public static void StartServer() + { + TcpListener tl = new TcpListener(IPAddress.Any, 4999); + tl.Start(); + while (true) + { + TcpClient tc = tl.AcceptTcpClient(); + Client client = new Client { tc = tc }; + new Thread(client.ClientConn) { IsBackground = true }.Start(); + } + } + } +} \ No newline at end of file diff --git a/Server/Socket/Models/ServerModel.cs b/Server/Socket/Models/ServerModel.cs new file mode 100644 index 0000000..cac9fb6 --- /dev/null +++ b/Server/Socket/Models/ServerModel.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.Sockets; +using System.Threading.Tasks; + +namespace Server.Socket.Models +{ + /// + /// 单个服务模型 + /// + public class ServerModel + { + //标识 + public string key; + //连接状态 + public int state = 1; + //对内主机 + public string ip; + //对内端口 + public int inport; + //对外端口 + public int outport; + + //主通信 + public TcpClient MainClient; + + public TcpListener lisenClient; + public TcpListener lisenClient1; + + //候选连接 + public TcpClient waitClient; + + //连接池 + public List connectMaps = new List(); + } + + + public class ConnectMap + { + public TcpClient inClient; + + public TcpClient outClient; + + public int state =1; + } +} diff --git a/Server/Startup.cs b/Server/Startup.cs new file mode 100644 index 0000000..8b28f17 --- /dev/null +++ b/Server/Startup.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; + +namespace Server +{ + public class Startup + { + public Startup(IConfiguration configuration) + { + Configuration = configuration; + } + + public IConfiguration Configuration { get; } + + // This method gets called by the runtime. Use this method to add services to the container. + public void ConfigureServices(IServiceCollection services) + { + services.AddControllers(); + } + + // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. + public void Configure(IApplicationBuilder app, IWebHostEnvironment env) + { + if (env.IsDevelopment()) + { + app.UseDeveloperExceptionPage(); + } + + app.UseRouting(); + + app.UseAuthorization(); + + app.UseEndpoints(endpoints => + { + endpoints.MapControllers(); + }); + new Thread(Socket.Map.Hosts.StartServer) { IsBackground = true }.Start(); + } + } +} diff --git a/Server/WeatherForecast.cs b/Server/WeatherForecast.cs new file mode 100644 index 0000000..1bb9036 --- /dev/null +++ b/Server/WeatherForecast.cs @@ -0,0 +1,15 @@ +using System; + +namespace Server +{ + public class WeatherForecast + { + public DateTime Date { get; set; } + + public int TemperatureC { get; set; } + + public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); + + public string Summary { get; set; } + } +} diff --git a/Server/appsettings.Development.json b/Server/appsettings.Development.json new file mode 100644 index 0000000..8983e0f --- /dev/null +++ b/Server/appsettings.Development.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Information" + } + } +} diff --git a/Server/appsettings.json b/Server/appsettings.json new file mode 100644 index 0000000..d9d9a9b --- /dev/null +++ b/Server/appsettings.json @@ -0,0 +1,10 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Information" + } + }, + "AllowedHosts": "*" +} diff --git a/Util/KeyHelper.cs b/Util/KeyHelper.cs new file mode 100644 index 0000000..8e9efce --- /dev/null +++ b/Util/KeyHelper.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Util +{ + public static class KeyHelper + { + /// + /// 生成主键 + /// + /// + public static string GenerateKey() + { + return Guid.NewGuid().ToString(); + } + } +} diff --git a/Util/LogHelper.cs b/Util/LogHelper.cs new file mode 100644 index 0000000..64fed79 --- /dev/null +++ b/Util/LogHelper.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Util +{ + public static class LogHelper + { + public static void Logger(string s) + { + Console.WriteLine(s); + } + } +} diff --git a/Util/PortHelper.cs b/Util/PortHelper.cs new file mode 100644 index 0000000..22b8bf9 --- /dev/null +++ b/Util/PortHelper.cs @@ -0,0 +1,137 @@ +using System; +using System.Net; +using System.Net.NetworkInformation; +using System.Net.Sockets; +using System.Text; +using System.Threading; + +namespace Util +{ + public static class PortHelper + { + /// + /// 检测端口是否使用 + /// + /// + /// + public static bool PortInUse(int port) + { + bool inUse = false; + + IPGlobalProperties ipProperties = IPGlobalProperties.GetIPGlobalProperties(); + IPEndPoint[] ipEndPoints = ipProperties.GetActiveTcpListeners(); + + foreach (IPEndPoint endPoint in ipEndPoints) + { + if (endPoint.Port == port) + { + inUse = true; + break; + } + } + + return inUse; + } + + /// + /// 获取第一个可用的端口号 + /// + /// + public static int GetFirstAvailablePort() + { + int MAX_PORT = 6000; //系统tcp/udp端口数最大是65535            + int BEGIN_PORT = 5000;//从这个端口开始检测 + + for (int i = BEGIN_PORT; i < MAX_PORT; i++) + { + if (!PortInUse(i)) return i; + } + + return -1; + } + + /// + /// 发送 + /// + /// + /// + public static void H_Send(this NetworkStream ns, string s) + { + byte[] bt = Encoding.UTF8.GetBytes(s);//这里发送一个连接提示 + ns.Write(bt, 0, bt.Length); + } + + /// + /// 接收 + /// + /// + /// + public static string H_Recv(this NetworkStream ns) + { + byte[] bt = new byte[10240]; + int count = ns.Read(bt, 0, bt.Length); + if (count == 0) throw new Exception("连接断开"); + return Encoding.UTF8.GetString(bt, 0, count); + } + + /// + /// 建立连接 + /// + /// + /// + public static void Lianjie(TcpClient tc1, TcpClient tc2) + { + tc1.SendTimeout = 300000; + tc1.ReceiveTimeout = 300000; + tc2.SendTimeout = 300000; + tc2.ReceiveTimeout = 300000; + object obj1 = (object)(new TcpClient[] { tc1, tc2 }); + object obj2 = (object)(new TcpClient[] { tc2, tc1 }); + ThreadPool.QueueUserWorkItem(new WaitCallback(Transfer), obj1); + ThreadPool.QueueUserWorkItem(new WaitCallback(Transfer), obj2); + } + + /// + /// 转发 + /// + /// + public static void Transfer(object obj) + { + try + { + TcpClient tc1 = ((TcpClient[])obj)[0]; + TcpClient tc2 = ((TcpClient[])obj)[1]; + NetworkStream ns1 = tc1.GetStream(); + NetworkStream ns2 = tc2.GetStream(); + while (true) + { + try + { + //这里必须try catch,否则连接一旦中断程序就崩溃了,要是弹出错误提示让机主看见那就囧了 + //LogHelper.Logger("准备接收数据 "); + byte[] bt = new byte[10240]; + int count = ns1.Read(bt, 0, bt.Length); + if (count == 0) throw new Exception("连接断开"); + ns2.Write(bt, 0, count); + //LogHelper.Logger("接收到数据 " + BitConverter.ToString(bt, 0, count) + count.ToString()); + } + catch (Exception ex) + { + ns1.Dispose(); + ns2.Dispose(); + tc1.Close(); + tc2.Close(); + tc1.Dispose(); + tc2.Dispose(); + LogHelper.Logger("连接关闭 " + ex.Message); + break; + } + } + } + catch (Exception ex) + { + LogHelper.Logger("转发方法出错 " + ex.Message); + } + } + } +} diff --git a/Util/Util.csproj b/Util/Util.csproj new file mode 100644 index 0000000..9f5c4f4 --- /dev/null +++ b/Util/Util.csproj @@ -0,0 +1,7 @@ + + + + netstandard2.0 + + +