namespace Microshaoft
{
using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.ServiceModel.Channels;
class EchoServer
{
Socket server;
public EchoServer(IPEndPoint localPoint)
{
server = new Socket
(
localPoint.AddressFamily
, SocketType.Stream
, ProtocolType.Tcp
);
server.Bind(localPoint);
server.Listen(5);
accept_async();
}
private void accept_async()
{
var accept = new SocketAsyncEventArgs();
accept.Completed += accept_Completed;
server.AcceptAsync(accept);
}
int i = 0;
void accept_Completed(object sender, SocketAsyncEventArgs e)
{
accept_async();
var client = e.AcceptSocket;
e.UserToken = i ++;
e.Completed -= accept_Completed;
e.Completed += receive_Completed;
var buffer = new byte[1024];
e.SetBuffer(buffer, 0, buffer.Length);
client.ReceiveAsync(e);
}
void receive_Completed(object sender, SocketAsyncEventArgs e)
{
var client = sender as Socket;
if (e.BytesTransferred == 0)
{
Console.WriteLine("socket is closed");
client.Close();
}
else
{
//client.Send(e.Buffer, e.BytesTransferred, SocketFlags.None);
byte[] buffer = new byte[e.BytesTransferred];
Buffer.BlockCopy(e.Buffer, 0, buffer, 0, buffer.Length);
string s = BitConverter.ToString(buffer);
//s = Encoding.ASCII.GetString(buffer);
Console.WriteLine("===={0}UserToken: [{1}]{0}Bytes Transferred:[{2}]{0}Data:[{3}]{0}====", "\r\n", e.UserToken, e.BytesTransferred, s);
//Console.WriteLine(s);
client.ReceiveAsync(e);
}
}
}
}
namespace ConsoleApplication
{
using System;
using System.Net;
using Microshaoft;
/// <summary>
/// Class1 的摘要说明。
/// </summary>
public class Class1
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
//[STAThread]
static void Main(string[] args)
{
//
// TODO: 在此处添加代码以启动应用程序
//
IPAddress ipa;
IPAddress.TryParse("127.0.0.1", out ipa);
EchoServer x = new EchoServer(new IPEndPoint(ipa, 8180));
Console.WriteLine("Hello World");
Console.WriteLine(Environment.Version.ToString());
Console.ReadLine();
}
}
}