using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Sockets;
using System.Net;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace MyProject
{
public class TcpServer
{
public Socket ListenSocket { get; set; }
public bool ListenFlag { get; set; }
public Socket AcceptSocket { get; set; }
public bool AcceptFlag { get; set; }
public bool ReceiveFlag { get; set; }
public int ReceiveLength { get; set; }
public byte[] ReceiveBuffer { get; set; } = new byte[1024];
public int Listen(string ip, int port)
{
if (!ListenFlag)
{
ListenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ipAndPort = new IPEndPoint(IPAddress.Parse(ip), port);
try
{
ListenSocket.Bind(ipAndPort);
ListenSocket.Listen(10);
Thread threadListen = new Thread(Accept);
threadListen.IsBackground = true;
threadListen.Start();
ListenFlag = true;
return 0;
}
catch (Exception)
{
return -1;
}
}
else
{
return 1;
}
}
public void Close()
{
if (ListenFlag)
{
AcceptSocket.Close();
ListenSocket.Close();
AcceptFlag = false;
ListenFlag = false;
}
}
private void Accept()
{
while (ListenFlag)
{
if (!AcceptFlag)
{
try
{
AcceptSocket = ListenSocket.Accept();
AcceptFlag = true;
Thread threadReceive = new Thread(Receive);
threadReceive.IsBackground = true;
threadReceive.Start();
}
catch (Exception)
{
break;
}
}
Thread.Sleep(100);
}
}
private void Receive()
{
while (AcceptFlag)
{
try
{
ReceiveLength = AcceptSocket.Receive(ReceiveBuffer);
if (ReceiveLength == 0)
{
Thread.Sleep(100);
if (AcceptSocket.Connected)
{
AcceptSocket.Close();
AcceptFlag = false;
}
break;
}
else
{
ReceiveFlag = true;
}
}
catch (Exception)
{
break;
}
}
}
public int Send(byte[] buffer)
{
if (AcceptSocket.Connected)
{
try
{
AcceptSocket.Send(buffer);
return 0;
}
catch (Exception)
{
return -1;
}
}
else
{
return 1;
}
}
}
}
C# TCP服务器程序
最新推荐文章于 2024-07-09 09:44:27 发布