C# tcp test 服务器端

来源:互联网 发布:交通银行数据录入员 编辑:程序博客网 时间:2024/06/12 18:22
using System;using System.Diagnostics;using System.Net;using System.Net.Sockets;using System.Text;using System.Threading;using System.Windows;using System.Windows.Controls;using Microsoft.Win32;//servernamespace WpfApplication1{    /// <summary>    ///     MainWindow.xaml 的交互逻辑    /// </summary>    public partial class MainWindow : Window    {        private TcpListener _tcpListener;        private TcpClient _acceptTcpClient;        public MainWindow()        {            InitializeComponent();            _tcpListener = new TcpListener(IPAddress.Any, 8888);            _tcpListener.AllowNatTraversal(true);            _tcpListener.Start();            Thread thread = new Thread(() => { InitTcpServer(_tcpListener); });            thread.Start();        }        private void InitTcpServer(TcpListener tcpListener)        {            try            {                _acceptTcpClient = tcpListener.AcceptTcpClient();                while (true)                {                    if (_acceptTcpClient.Connected)                    {                        var t = new Thread(() => { ReadNetworkSream(_acceptTcpClient); });                        t.Start();                    }                }            }            catch (Exception)            {                System.Console.WriteLine("发生异常");            }            finally            {                tcpListener.Stop();            }        }        private void ReadNetworkSream(TcpClient client)        {            var stopWatch = new Stopwatch();            stopWatch.Start();            if (stopWatch.ElapsedMilliseconds > 30000)            {                client.Close();                Console.WriteLine("连接超时");                return;            }            var stream = client.GetStream();            while (stream != null &&                    stream.CanRead &&                    stream.DataAvailable)            {                var bytes = new byte[client.ReceiveBufferSize];                int numbersByteRead = stream.Read(bytes, 0, bytes.Length);                var str = Encoding.Default.GetString(bytes, 0, numbersByteRead);                Dispatcher.Invoke(() =>                {                    var txtLable = this.FindName("ReceiveText")                        as TextBox;                    txtLable.Text += str;                });                Console.WriteLine("bytes num {0}, text  {1}", bytes.Length, str);            }        }        private void _发送按钮(object sender, RoutedEventArgs e)        {            var inputBox = this.FindName("InputBox") as TextBox;            Byte[] bytes = System.Text.Encoding.Default.GetBytes(inputBox.Text);            _acceptTcpClient.GetStream().Write(bytes, 0, bytes.Length);        }        private void _选择文件上传按钮(object sender, RoutedEventArgs e)        {            var fileDlg = new OpenFileDialog();            fileDlg.ShowDialog();        }    }}
0 0
原创粉丝点击