Переглянути джерело

Support customize local end

HMBSbige 7 роки тому
батько
коміт
ab53e166fc

+ 1 - 1
NatTypeTester/MainForm.Designer.cs

@@ -89,9 +89,9 @@
 			// 
 			this.textBox3.Location = new System.Drawing.Point(95, 71);
 			this.textBox3.Name = "textBox3";
-			this.textBox3.ReadOnly = true;
 			this.textBox3.Size = new System.Drawing.Size(240, 21);
 			this.textBox3.TabIndex = 6;
+			this.textBox3.Text = "0.0.0.0:0";
 			// 
 			// textBox4
 			// 

+ 23 - 12
NatTypeTester/MainForm.cs

@@ -16,9 +16,8 @@ namespace NatTypeTester
 
 		private delegate void VoidMethodDelegate();
 
-		private static string[] Core(string server, int port)
+		private static string[] Core(string local, string server, int port)
 		{
-			var socketv4 = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
 			try
 			{
 				if (string.IsNullOrWhiteSpace(server))
@@ -27,16 +26,27 @@ namespace NatTypeTester
 					return null;
 				}
 
-				socketv4.Bind(new IPEndPoint(IPAddress.Any, 0));
+				using (var socketv4 = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp))
+				{
+					if (local != string.Empty)
+					{
+						var ip_port = local.Split(':');
+						socketv4.Bind(new IPEndPoint(IPAddress.Parse(ip_port[0]), Convert.ToInt32(ip_port[1])));
+					}
+					else
+					{
+						socketv4.Bind(new IPEndPoint(IPAddress.Any, 0));
+					}
 
-				var result = STUN_Client.Query(server, port, socketv4);
+					var result = STUN_Client.Query(server, port, socketv4);
 
-				return new[]
-				{
-					result.NetType.ToString(),
-					socketv4.LocalEndPoint.ToString(),
-					result.NetType != STUN_NetType.UdpBlocked ? result.PublicEndPoint.ToString() : string.Empty
-				};
+					return new[]
+					{
+							result.NetType.ToString(),
+							socketv4.LocalEndPoint.ToString(),
+							result.NetType != STUN_NetType.UdpBlocked ? result.PublicEndPoint.ToString() : string.Empty
+					};
+				}
 			}
 			catch (Exception ex)
 			{
@@ -45,7 +55,7 @@ namespace NatTypeTester
 			}
 			finally
 			{
-				socketv4.Close();
+
 			}
 		}
 
@@ -56,10 +66,11 @@ namespace NatTypeTester
 				button1.Enabled = false;
 				var server = comboBox1.Text;
 				var port = Convert.ToInt32(numericUpDown1.Value);
+				var local = textBox3.Text;
 				string[] res = null;
 				var t = new Task(() =>
 				{
-					res = Core(server, port);
+					res = Core(local, server, port);
 				});
 				t.Start();
 				t.ContinueWith(task =>

+ 2 - 2
NatTypeTester/Properties/AssemblyInfo.cs

@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
 // 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号
 // 方法是按如下所示使用“*”: :
 // [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.1.0.0")]
-[assembly: AssemblyFileVersion("1.1.0.0")]
+[assembly: AssemblyVersion("1.3.0.0")]
+[assembly: AssemblyFileVersion("1.3.0.0")]