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;
//server
namespace 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();
}
}
}
C# tcp test 服务器端
最新推荐文章于 2025-04-24 15:03:13 发布