public static class MyTcpServer
{
public static readonly List<Client2> Client2S=new List<Client2>();
public static void Start()
{
var tcpServer = new TcpListener(new IPEndPoint(Dns.GetHostEntry(Dns.GetHostName()).AddressList[1], 7788));
tcpServer.Start();
Console.WriteLine("TcpServer已启动!");
while (true)
{
try
{
var tcpClient = tcpServer.AcceptTcpClient();
var c2 = new Client2(tcpClient);
Client2S.Add(c2);
}
catch(Exception ex)
{
throw new Exception(ex.Message);
}
}
}
}
用Client2类来接收客户消息
public class Client2
{
private readonly TcpClient _client;
List<byte> sb = new List<byte>();
public byte[] Data=new byte[1];
public Client2(TcpClient c)
{
_client = c;
new Thread(ReceiveMsg) { IsBackground = true }.Start();
}
private void ReceiveMsg()
{
var stream = _client.GetStream();
while (true)
{
try
{
if (_client.Client.Poll(1000, SelectMode.SelectRead)&&_client.Client.Available==0||!_client.Client.Connected)
{
Console.WriteLine(@"远程连接被强制关闭4");
stream.Close();
_client.Close();
break;
}
if (stream.DataAvailable)
{
var length = stream.Read(Data, 0, Data.Length);
sb.AddRange(Data.Take(length));
continue;
}
if (sb.Count > 0)
{
Console.WriteLine($@"接收到信息:{Encoding.UTF8.GetString(sb.ToArray())}");
sb.Clear();
}
var length2 = stream.Read(Data, 0, Data.Length);
sb.AddRange(Data.Take(length2));
}
catch (Exception)
{
Console.WriteLine(@"远程连接被强制关闭1");
stream.Close();
_client.Close();
break;
}
}
}
}
创建TcpClient客户端
初始化
try
{
_client = new TcpClient(hostname,port);
MessageBox.Show(@"连接成功");
}
catch
{
new Exception("初始连接失败");
}
发送消息
if
(_client.Connected) {
var data = Encoding.UTF8.GetBytes(richTextBox1.Text);
_client.GetStream().Write(data, 0,data.Length);
}
else
MessageBox.Show("您没有连接呢!");
}