一个简单的udp echo server程序:

[复制链接]
查看11 | 回复1 | 2013-12-19 20:30:12 | 显示全部楼层 |阅读模式
一个简单的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
{
///
/// 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.
///
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&quot

;

while(true){
string input=Console.ReadLine();
if ( "exit"==input ) {
if (serverThread.IsAlive){
serverThread.Abort();
Console.WriteLine("thread was terminated&quot

;
}
Console.WriteLine("server stop&quot

;
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);
}
}
}
}
回复

使用道具 举报

千问 | 2013-12-19 20:30:12 | 显示全部楼层
佩服ING
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行