c#Socket编程,使用TcpListener,服务器循环接收字符串后输出

c#Socket编程,使用TcpListener,服务器循环接收字符串后输出

创建TcpListener服务类

 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客户端

  1. 初始化
  			try
  			{
                _client = new TcpClient(hostname,port);
                MessageBox.Show(@"连接成功");
            }
            catch
            {
                new Exception("初始连接失败");
            }
  1. 发送消息
		    if 
			(_client.Connected) {
                var data = Encoding.UTF8.GetBytes(richTextBox1.Text);
                _client.GetStream().Write(data, 0,data.Length);
            }
            else
                MessageBox.Show("您没有连接呢!");
            }
  1. 重新连接并开启接收消息
    try
            {
                _client=new TcpClient(hostname,port);
                MessageBox.Show(@"重新连接成功");
                t1=new Thread(() =>
                {
                    while (true)
                    {
                        try
                        {
                            byte[] data = new byte[1024];
                            var length = _client.GetStream().Read(data,0,data.Length);
                            string msg = Encoding.UTF8.GetString(data, 0, length);
                            MessageBox.Show(msg);
                        }
                        catch (Exception exception)
                        {
                            MessageBox.Show(@"资源已释放,无法读取数据");
                            break;
                        }
                    }
                }).Start();
            }
            catch (Exception ex)
            {
                MessageBox.Show("远程服务器未打开!");
            }
  1. 断开连接
 			 MessageBox.Show("准备关闭");
            if (_client.Client.Connected)
            {
                _client.GetStream().Close();
                _client.Close();
            }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值