public class SocSever
{
private int port = 102;
private IPAddress ip;
private TcpListener tlsocket;
private TcpClient tcsocket;
private NetworkStream tcStream;
private Thread listenTh;
private System.Timers.Timer tickHart;
public SocSever(string strIp,int nPort)
{
if (!IPAddress.TryParse(strIp, out ip))
{
ip = Dns.GetHostAddresses(Dns.GetHostName())[0];
}
if (nPort != 0)
{
port = nPort;
}
tickHart = new System.Timers.Timer(1000f);
tickHart.AutoReset = true;
tickHart.Enabled = false;
tickHart.Elapsed += new System.Timers.ElapsedEventHandler(tickHart_Elapsed);
tlsocket = new TcpListener(ip, port);
listenTh = new Thread(new ThreadStart(StartListen));
listenTh.Start();
}
private void StartListen()
{
tlsocket.Start();
while (true)
{
tcsocket = this.tlsocket.AcceptTcpClient();
tcStream = tcsocket.GetStream();
Thread clientThread = new Thread(new ThreadStart(HandleClient));
clientThread.Start();
}
}
private void HandleClient()
{
byte[] message = new byte[2048];
tickHart.Enabled = true;
while (true)
{
int bytesRead = 0;
try
{
bytesRead = tcStream.Read(message, 0, 2048);
}
catch (SystemException ex)
{
break;
}
if (bytesRead == 0)
{
break;
}
ASCIIEncoding encoder = new ASCIIEncoding();
Console.WriteLine(encoder.GetString(message, 0, bytesRead));
}
tickHart.Enabled = false;
tcsocket.Close();
tcsocket = null;
}
private void tickHart_Elapsed(object obj, System.Timers.ElapsedEventArgs ea)
{
try
{
byte[] byteArray = new byte[] { (byte)6 };
tcStream.Write(byteArray, 0, 1);
tcStream.Flush();
}
catch (System.Net.Sockets.SocketException ex)
{
tcsocket.Close();
}
}
public void WriteMsgToClient(string strxml)
{
try
{
ASCIIEncoding encoder = new ASCIIEncoding();
byte[] btStream = encoder.GetBytes(strxml);
tcStream.Write(btStream, 0, btStream.Length);
tcStream.Flush();
}
catch(SocketException ex)
{
tcsocket.Close();
}
}
}
服務器:
SocSever ss = new SocSever("192.168.1.2",9999);
控制檯客戶端:
class Program
{
static void Main(string[] args)
{
TcpClient client = new TcpClient();
IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Parse("192.168.1.102"), 102);
Console.WriteLine("輸入字符C開始...");
while (Console.ReadKey().Key == System.ConsoleKey.C)
{
Console.WriteLine();
client.Connect(serverEndPoint);
NetworkStream clientStream = client.GetStream();
Thread clientThread = new Thread(new ParameterizedThreadStart(ReadSomething));
clientThread.Start(clientStream);
while (true)
{
Console.WriteLine("輸入要發送的信息");
ASCIIEncoding encoder = new ASCIIEncoding();
byte[] buffer = encoder.GetBytes(Console.ReadLine());
clientStream.Write(buffer, 0, buffer.Length);
clientStream.Flush();
}
}
}
static void ReadSomething(object clientstream)
{
NetworkStream nws = (NetworkStream)clientstream;
byte[] message = new byte[2048];
while (true)
{
int bytesRead = 0;
try
{
bytesRead = nws.Read(message, 0, 2048);
}
catch (SystemException ex)
{
break;
}
if (bytesRead == 0)
{
break;
}
ASCIIEncoding encoder = new ASCIIEncoding();
Console.WriteLine("服務器消息:"+encoder.GetString(message, 0, bytesRead));
}
}
}