è¿æ¯æåå¼å§èªå¦C#æ¶åçä¸ä¸ªæ§å¶å°å±åç½è天软件ï¼ç¨äºå¤çº¿ç¨æ¥çå¬ååéæ¶æ¯ï¼ä»£ç å¾ä¹±ï¼å¸æè½å¸®å°ä½
//Program.cs
using System;
using System.Net;
using System.Net.NetworkInformation;
using System.Threading;
namespace ChatClient
{
class Program
{
static TCP tcp = new TCP();
static Thread t1 = new Thread(new ThreadStart(GetConnection));
static Thread t2 = new Thread(new ThreadStart(GetMsg));
static Thread t4 = new Thread(new ThreadStart(INI));
static string MyName, YourName, YourIP, IIP, OIP;
static int MyPort, YourPort;
static string RecXML;
static bool flag = false;
static void Main(string[] args)
{
MyPort = tcp.getPortal();
IIP = tcp.GetLocalIPAddress();
tcp.RecIni(IPAddress.Parse(IIP), MyPort);
// OIP = tcp.GetIPAddress();
#region Thread
/* show
Thread t1 = new Thread(new ThreadStart(TestMethod));
Thread t2 = new Thread(new ParameterizedThreadStart(TestMethod));
t1.IsBackground = true;
t2.IsBackground = true;
t1.Start();
t2.Start("hello");*/
t1.IsBackground = true;
t1.Start();
t4.IsBackground = false;
t4.Start();
#endregion
while (true)
{
while (flag)
tcp.SendMsg(IPAddress.Parse(YourIP), YourPort, Console.ReadLine());
}
}
private static void INI()
{
Console.WriteLine("æ¨çå±åç½IPå°åä¸ºï¼ " + IIP);
Console.WriteLine("æ¨çæ¶ä¿¡ç«¯å£ä¸ºï¼ " + MyPort.ToString());
//Console.WriteLine("æ¨ç广åç½IPå°åä¸ºï¼ " + OIP);
Console.Write("请è¾å
¥æ¨çè天æµç§°ï¼ ");
MyName = Console.ReadLine();
Console.Write("请è¾å
¥å¯¹æ¹IPå°åï¼ ");
YourIP = Console.ReadLine();
Console.Write("请è¾å
¥å¯¹æ¹æ¶ä¿¡ç«¯å£ï¼ ");
YourPort = Int32.Parse(Console.ReadLine());
#region XML
string xml = "";
xml += "<IIP>" + IIP + "</IIP>";
//xml += "<OIP>" + OIP + "</OIP>";
xml += "<PORT>" + MyPort.ToString() + "</PORT>";
xml += "<NAME>" + MyName + "</NAME>";
#endregion
tcp.SendMsg(IPAddress.Parse(YourIP), YourPort, xml);
}
private static void GetMsg()
{
while (true)
{
Console.WriteLine("\n" + YourName + " : " + tcp.RecMsg());
}
}
private static void GetConnection()
{
while (true)
{
RecXML = tcp.RecMsg();
if (RecXML.Contains("<IIP>") && RecXML.Contains("<NAME>") && RecXML.Contains("<PORT>"))
{
Console.Clear();
YourIP = RecXML.Substring(RecXML.IndexOf("<IIP>") + 5, RecXML.IndexOf("</IIP>") - RecXML.IndexOf("<IIP>") - 5);
YourPort = Int32.Parse(RecXML.Substring(RecXML.IndexOf("<PORT>") + 6, RecXML.IndexOf("</PORT>") - RecXML.IndexOf("<PORT>") - 6));
YourName = RecXML.Substring(RecXML.IndexOf("<NAME>") + 6, RecXML.IndexOf("</NAME>") - RecXML.IndexOf("<NAME>") - 6);
tcp.RecIni(IPAddress.Parse(IIP), MyPort);
Console.WriteLine("å·²è¿æ¥ â " + YourName + " : " + YourIP + ":" + YourPort.ToString());
t4.Abort();
if (string.IsNullOrWhiteSpace(MyName))
{
Console.WriteLine("ç±äºæ¨ä¸ºè¾å
¥è天æµç§°ï¼æ¨çæµç§°å®ä¸ºUnknown ");
MyName = "Unknown";
}
#region XML
string xml = "";
xml += "<IIP>" + IIP + "</IIP>";
//xml += "<OIP>" + OIP + "</OIP>";
xml += "<PORT>" + MyPort.ToString() + "</PORT>";
xml += "<NAME>" + MyName + "</NAME>";
xml += "<FINAL></FINAL>";
#endregion
if (!RecXML.Contains("<FINAL></FINAL>"))
tcp.SendMsg(IPAddress.Parse(YourIP), YourPort, xml);
t2.IsBackground = true;
t2.Start();
flag = true;
Console.WriteLine("æä¸å车以å¼å§è天");
t1.Abort();
}
}
}
private static void EnumComputers()
{
try
{
for (int i = 1; i <= 255; i++)
{
Ping myPing;
myPing = new Ping();
myPing.PingCompleted += new PingCompletedEventHandler(_myPing_PingCompleted);
string pingIP = "192.168.0." + i.ToString();
myPing.SendAsync(pingIP, 1000, null);
}
}
catch
{
}
}
private static void _myPing_PingCompleted(object sender, PingCompletedEventArgs e)
{
if (e.Reply.Status == IPStatus.Success)
{
Console.WriteLine(e.Reply.Address.ToString() + "|" + Dns.GetHostByAddress(IPAddress.Parse(e.Reply.Address.ToString())).HostName);
}
}
}
}//TCP.cs
using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace ChatClient
{
public class TCP
{
static TcpClient Rclient = null;
static TcpClient Sclient = null;
static NetworkStream stream = null;
static byte[] buffer = null;
static string receiveString = null;
static byte[] sendData = null;//è¦åéçåèæ°ç»
static TcpListener listener;
public void RecIni(IPAddress IP, int Port)
{
listener = new TcpListener(IP, Port);//ç¨æ¬å°IPå端å£å®ä¾åListener
listener.Start();//å¼å§çå¬
}
public string RecMsg()
{
listener.Start();
Rclient = listener.AcceptTcpClient();//æ¥åä¸ä¸ªClient
buffer = new byte[Rclient.ReceiveBufferSize];
stream = Rclient.GetStream();//è·åç½ç»æµ
stream.Read(buffer, 0, buffer.Length);//读åç½ç»æµä¸çæ°æ®
stream.Close();//å
³éæµ
Rclient.Close();//å
³éClient
listener.Stop();
receiveString = Encoding.Default.GetString(buffer).Trim('\0');//转æ¢æå符串
return receiveString;
}
public void SendMsg(IPAddress remoteIP, int remotePort, string sendString)
{
sendData = Encoding.Default.GetBytes(sendString);//è·åè¦åéçåèæ°ç»
Sclient = new TcpClient();//å®ä¾åTcpClient
try
{
Sclient.Connect(remoteIP, remotePort);//è¿æ¥è¿ç¨ä¸»æº
}
catch (System.Exception ex)
{
Console.WriteLine("è¿æ¥è¶
æ¶ï¼å¯¹æ¹å¯è½å·²ç¦»çº¿ï¼");//è¿æ¥å¤±è´¥
Console.ReadKey();
return;
}
stream = Sclient.GetStream();//è·åç½ç»æµ
stream.Write(sendData, 0, sendData.Length);//å°æ°æ®åå
¥ç½ç»æµ
stream.Close();//å
³éç½ç»æµ
Sclient.Close();//å
³é客æ·ç«¯
}
public int getPortal()
{
Random ran = new Random();
int RandKey = ran.Next(1025, 65534);
while (true)
{
if (NotUsed(RandKey))
return RandKey;
else
RandKey = ran.Next(1025, 65534);
}
}
private bool NotUsed(int MonitorPort)
{
Socket listenSocket = null;
try
{
IPEndPoint LocalIp = new IPEndPoint(IPAddress.Any, MonitorPort);
listenSocket = new Socket(LocalIp.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
listenSocket.Bind(LocalIp);
return true; // 没æ被å ç¨
}
catch
{
return false; //被å ç¨
}
finally
{
if (listenSocket != null)
listenSocket.Close();
}
}
public string GetLocalIPAddress()
{
//è·å¾å±åç½çIPå°å
IPHostEntry ihe = Dns.GetHostByName(Dns.GetHostName());
IPAddress myIp = ihe.AddressList[0];
string loginIP = myIp.ToString();
return loginIP;
}
public string GetIPAddress()
{
string strUrl = "
http://1212.ip138.com/ic.asp"; Uri uri = new Uri(strUrl);
WebRequest webreq = WebRequest.Create(uri);
Stream s = webreq.GetResponse().GetResponseStream();
StreamReader sr = new StreamReader(s, Encoding.Default);
string all = sr.ReadToEnd();
int i = all.IndexOf("[") + 1;
int j = all.IndexOf("]");
//åæå符串å¾å°IP
string ip = all.Substring(i, j - i);
return ip;
#region
#endregion
}
}
}