C++网络编程第一个程序恐怕都是sockaddr_in、socket、bind、listen、accept、recv/send、closesocket一套流程,C#一样可以这么做,而且还很有ACE类别封装的思想。
public static void Main(string[] args)
{
//sockaddr_in addr;
IPEndPoint addr = new IPEndPoint(IPAddress.Any, 2305);
//svrsock = socket(...);
Socket svrsock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//bind
svrsock.Bind(addr);
//listen
svrsock.Listen(5);
//accept
Socket client = svrsock.Accept();
IPEndPoint clientaddr = (IPEndPoint)client.RemoteEndPoint;
const int RECV_BUF_LEN = 1024;
int bytesOfReceived;
byte[] receiveBuf = new byte[RECV_BUF_LEN];
string welcome = "yes,you login,it's snake";
client.Send(Encoding.ASCII.GetBytes(welcome));
while(true)
{
bytesOfReceived = client.Receive(receiveBuf);
if(0 == bytesOfReceived)
{
client.Close();
break;
}
System.Console.WriteLine("Received:" + Encoding.ASCII.GetString(receiveBuf,0,bytesOfReceived));
client.Send(receiveBuf,0,bytesOfReceived,SocketFlags.None);
}
System.Console.WriteLine("disconnect from " + clientaddr.Address);
svrsock.Close();
}