a udp echo server

一个简单的udp echo server程序:
(1)没有测试是否正确,还没有编写udp echo client程序
(2)接收包的buffer大小是固定的,如果包的大小超过buffer的话,会产生异常,完美的udp程序应该捕获异常,调整buffer大小,通知重发等。
(3)不知道结束工作线程的方式是否合适,还有没有更好的方法。

/*
 * Created by SharpDevelop.
 * User: xuhx
 * Date: 2004-6-17
 * Time: 22:30
  */

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;

namespace Echo
{
 /// <summary>
 /// this is a udp echo server. i have not test it because i does not
 /// write a udp echo client. It still expects my further testing.
 /// </summary>
 public class UdpEchoServer
 {
  private static Socket serverSocket;
  private static Thread serverThread;
  
  private static readonly int BUF_SIZE=2048;
  
  public static void Main(){
   IPEndPoint serverEndPoint=new IPEndPoint(IPAddress.Any,8004);
   serverSocket=new Socket(AddressFamily.InterNetwork,
                           SocketType.Dgram,
                           ProtocolType.Udp);
   serverSocket.Bind(serverEndPoint);
   serverThread=new Thread(new ThreadStart(EchoThreadWorkMethod));
   serverThread.Start();
   
   Console.WriteLine("the echo server has run, press \"exit\" to terminate the run");
   
   while(true){
    string input=Console.ReadLine();
    if ( "exit"==input ) {
     if (serverThread.IsAlive){
      serverThread.Abort();
      Console.WriteLine("thread was terminated");
     }
     Console.WriteLine("server stop");
     serverSocket.Close();
     break;
    }
   }
  }
  
  private static void EchoThreadWorkMethod(){
   while(true){
    byte[] buf=new byte[BUF_SIZE];
    EndPoint remoteEndPoint=new IPEndPoint(IPAddress.Any,0);
    int receive=serverSocket.ReceiveFrom(buf,SocketFlags.None,ref remoteEndPoint);
    Console.WriteLine("receive from: [{0}]  message is: {1}",
                      remoteEndPoint,
                      Encoding.ASCII.GetString(buf,0,receive));
    serverSocket.SendTo(buf,receive,SocketFlags.None,remoteEndPoint);
   }
  }
 }
}

posted on 2004-06-17 23:45  星星之火  阅读(1788)  评论(0编辑  收藏  举报

导航