提交 a4a7ba42 编写于 作者: T tanghai

增加对TcpListener测试,TcpListener.AcceptSocketAsync()前后会在同一线程中

上级 78090343
......@@ -52,6 +52,7 @@
<ItemGroup>
<Compile Include="TcpAcceptorTest.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="TcpListenerTest.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Helper\Helper.csproj">
......
using System;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using Helper;
using Logger;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace TNetTest
{
[TestClass]
public class TcpListenerTest
{
private const ushort port = 11111;
private int count;
private readonly Barrier barrier = new Barrier(2);
private readonly object lockObject = new object();
[TestMethod]
public void AcceptAsync()
{
var thread1 = new Thread(Server);
thread1.Start();
Thread.Sleep(2);
for (int i = 0; i < 1; ++i)
{
var thread = new Thread(this.Client);
thread.Start();
}
barrier.SignalAndWait();
}
private async void Client()
{
using (var tcpClient = new TcpClient(AddressFamily.InterNetwork))
{
await tcpClient.ConnectAsync("127.0.0.1", port);
using (NetworkStream ns = tcpClient.GetStream())
{
try
{
var bytes = "tanghai".ToByteArray();
for (int i = 0; i < 100; ++i)
{
await ns.WriteAsync(bytes, 0, bytes.Length);
int n = await ns.ReadAsync(bytes, 0, bytes.Length);
Assert.AreEqual(7, n);
}
}
catch (Exception e)
{
Log.Debug(e.ToString());
}
}
}
barrier.RemoveParticipants(1);
}
private async void Server()
{
var tcpListener = new TcpListener(IPAddress.Parse("127.0.0.1"), port);
tcpListener.Start();
while (count != 1)
{
var socket = await tcpListener.AcceptSocketAsync();
var ns = new NetworkStream(socket);
Response(ns);
}
}
private async void Response(NetworkStream ns)
{
try
{
var bytes = new byte[1000];
for (int i = 0; i < 100; ++i)
{
int n = await ns.ReadAsync(bytes, 0, 100);
await ns.WriteAsync(bytes, 0, n);
}
lock (lockObject)
{
++count;
}
}
catch (Exception e)
{
Log.Debug(e.ToString());
}
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册