110,534
社区成员
发帖
与我相关
我的任务
分享
public partial class frmMain : Form
{
private string hostname = "\u0077\u0077\u0077\u002e\u0068\u0061\u006f\u006c\u0069\u0061\u006f\u007a\u0069\u002e\u0063\u006f\u006d";
private int port = 80;
private Encoding en = Encoding.GetEncoding("GB2312");
private string page = "/test/MySocket.asp";
private string templete =
@"GET {0} HTTP/1.1
Host:{1}
Connection:close
User-agent:Mozilla/4.0
Accept-language:zh-cn
";
//private IPEndPoint localPoint = null;//本地端点
//private IPEndPoint remotePoint = null;//远程端点
public frmMain()
{
InitializeComponent();
}
private void btnConnection_Click(object sender, EventArgs e)
{
btnConnection.Enabled = false;
Connection(hostname,port, page);
GC.Collect();
btnConnection.Enabled = true;
}
private void Connection(string hostname, int port, string page)
{
IPEndPoint localPoint = null;//本地端点
IPEndPoint remotePoint = null;//远程端点
IPAddress localAddress = Dns.GetHostAddresses(Dns.GetHostName())[0];
localPoint = new IPEndPoint(localAddress, IPEndPoint.MinPort);
IPAddress remoteAddress = Dns.GetHostAddresses(hostname)[0];
remotePoint = new IPEndPoint(remoteAddress, port);
TcpClient tc = new TcpClient();
string content = string.Format(templete, page, hostname);
//设置本地端点
if (localPoint.Port == IPEndPoint.MinPort)
{
while (true)
{
localPoint.Port++;
try
{
tc.Client.Bind(localPoint);
break;
}
catch
{
}
}
}
else
{
try
{
tc.Client.Bind(localPoint);
}
catch (Exception ex)
{
txtTarget.Text = "[端口] " + ex.Message;
return;
}
}
this.Text = localPoint.ToString();
//连接
try
{
tc.Connect(remotePoint);
}
catch (Exception ex) //有时会报这个错: 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。
{
txtTarget.Text = "[连接] " + ex.Message;
return;
}
NetworkStream stream = null;
try
{
stream = tc.GetStream();
}
catch (Exception ex)
{
txtTarget.Text = "[流] " + ex.Message;
tc.Close();
return;
}
try
{
//写
byte[] data = en.GetBytes(content);
stream.Write(data, 0, data.Length);
}
catch (Exception ex)
{
txtTarget.Text = "[写] " + ex.Message;
}
try
{
//读
byte[] data2 = new byte[1024];
stream.Read(data2, 0, 1024);
string result = en.GetString(data2);
txtTarget.Text = result;
}
catch (Exception ex)
{
txtTarget.Text = "[读]" + ex.Message;
}
//关闭
stream.Close();
tc.Client.Close();
tc.Close();
}
private void frmMain_FormClosing(object sender, FormClosingEventArgs e)
{
}
}
/// <summary>
/// UDP检查端口绑定
/// </summary>
/// <param name="localip"></param>
/// <param name="port"></param>
/// <returns></returns>
public static bool IsBindEndPoint(System.Net.IPAddress localip,int port)
{
System.Net.IPEndPoint ipe = new System.Net.IPEndPoint(localip, port);
System.Net.Sockets.Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, true);
try
{
s.Bind(ipe);
return false;
}
catch (System.Net.Sockets.SocketException ex)
{
if (ex.SocketErrorCode == System.Net.Sockets.SocketError.AddressAlreadyInUse)
{
return true;
}
else
{
return false;
}
}
finally
{
s.Close();
s = null;
}
}
/// <summary>
/// 判断是否合法IP /// </summary>
/// <param name="strIP"></param>
/// <returns></returns>
public static bool ValidateIPAddress(string strIP)
{
//if (null == strIP || "" == strIP.Trim() || Convert.IsDBNull(strIP))
if (string.IsNullOrEmpty(strIP.Trim()) || Convert.IsDBNull(strIP))
{ return false; }
return System.Text.RegularExpressions.Regex.IsMatch(strIP, @"^((\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.){3}(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$");
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Management;
using LanServer.Utilities;
namespace LanServer
{
public partial class FormNetStart : Form
{
public FormNetStart()
{
InitializeComponent();
}
System.Net.IPAddress[] HostIPAddress;
private System.Net.IPAddress ipsetted;
public System.Net.IPAddress StartIP
{
get { return ipsetted; }
set { ipsetted = value; }
}
private int portsetted;
public int StartPort
{
get { return portsetted; }
set { portsetted = value; }
}
private void FormNetStart_Load(object sender, EventArgs e)
{
//HostIPAddress= Utilities.Utilities. LocalHostIPAddress;
//string[] ali = Utilities.Utilities.Aliases;
//for (int i = 0; i < HostIPAddress.Length; i++)
//{
// // 显示当前ip;
// this.cdIPAddressList.Items.Add(HostIPAddress[i].ToString());
//}
//SELECT * FROM Win32_NetworkAdapterConfiguration")
try
{
///将本机的网卡加到列表显示Win32_NetworkAdapterConfiguration
///
ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc = mc.GetInstances();
//ArrayList strArr = new ArrayList();
//网卡数
//foreach (ManagementObject mo in moc)
//{
// if ((bool)mo["IPEnabled"])
// {
// //cdIPAddressList.Items.Add(mo["Caption"].ToString().Substring(10));
// //cdIPAddressList.Items.Add(mo["MacAddress"].ToString());
// string[] iplist = mo["IPAddress"] as string[];
// cdIPAddressList.Items.AddRange(iplist);
// }
// mo.Dispose();
//}
List<string> iplist = new List<string>();
List<string> caplist = new List<string>();
foreach (ManagementObject mo in moc)
{
if ((bool)mo["IPEnabled"])
{
//cdIPAddressList.Items.Add(mo["Caption"].ToString().Substring(10));
//cdIPAddressList.Items.Add(mo["MacAddress"].ToString());
caplist.Add(mo["Caption"].ToString().Substring(10));
//cdIPAddressList.Items.AddRange(iplist);
}
mo.Dispose();
}
foreach (ManagementObject mo in moc)
{
if ((bool)mo["IPEnabled"])
{
//cdIPAddressList.Items.Add(mo["Caption"].ToString().Substring(10));
//cdIPAddressList.Items.Add(mo["MacAddress"].ToString());
iplist.AddRange(mo["IPAddress"] as string[]);
//cdIPAddressList.Items.AddRange(iplist);
}
mo.Dispose();
}
if (iplist.Count == caplist.Count)
{
for (int c = 0; c < caplist.Count; c++)
{
//if (caplist[c].Substring(0,4).StartsWith(" WAN ") == false)
//{//VPN网路要去掉
// cdIPAddressList.Items.Add(caplist[c] + "|" + iplist[c]);
//}
//string ipitem = caplist[c] + "|" + iplist[c];
cdIPAddressList.Items.Add(caplist[c] + "|" + iplist[c]);
}
if (cdIPAddressList.Items.Count > 0)
cdIPAddressList.SelectedIndex = 0;
}
else
{
throw new ArgumentNullException("ManagementObject", "未能获得本机网络参数,请打开WMI服务");
}
}
catch (ManagementException mex)
{
LanServer.BizLogic.LogWriter.AddSystemException(mex);
}
catch (System.Security.SecurityException sex)
{
LanServer.BizLogic.LogWriter.AddSystemException(sex);
}
catch (Exception ex) {
LanServer.BizLogic.LogWriter.AddSystemException(ex);
}
}
private void btnStart_Click(object sender, EventArgs e)
{
if (cdIPAddressList.SelectedItem == null)
{
return;
}
//else
//{|| Utilities.Utilities.ValidateIPAddress(cdIPAddressList.Text) == false
// ipsetted = HostIPAddress[cdIPAddressList.SelectedIndex];
//}
if (string.IsNullOrEmpty(this.nudPort.Text))
{
return;
}
if (nudPort.Value < 1023 || nudPort.Value > 65535)
{
//MessageBox.Show(nudPort.Value.ToString());
nudPort.Value = 9051;
return;
}
//MessageBox.Show(cdIPAddressList.SelectedItem.ToString().Split ('|')[1]);
//ipsetted = HostIPAddress[cdIPAddressList.SelectedIndex];
ipsetted = System.Net.IPAddress.Parse(cdIPAddressList.SelectedItem.ToString().Split('|')[1]);
portsetted = (int)nudPort.Value;
//检查端口占用
if (Utilities.Utilities.IsBindEndPoint(ipsetted, portsetted) == true)
{
System.Windows.Forms.MessageBox.Show("监听端口已被其他程序占用,不能正确获得在线播放器信息,请修改程序设置?",
"UDP端口占用错误", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
return;
}
btnStart.DialogResult = DialogResult.OK;
this.DialogResult = btnStart.DialogResult;
}
}
}