青苔 发布留言 2008-10-30 16:08
请教基于UDP的客户服务器模式的实现?给小弟我参考下,谢谢!
请教基于UDP的客户服务器模式的实现?给小弟我参考下,谢谢!
编写UDP服务器程序接受UDP客户端程序的命令,并根据命令向UDP客户机做出响应。当UDP客户机向服务器请求“getfile”命令时,UDP服务器向客户机发送制定文件input中的数据;当UDP客户机向服务器请求gettime命令时,UDP服务器向客户机发送系统当前时间;当UDP客户机向服务器请求其它任何命令时,UDP服务器向客户机发送“这不是正确的命令”。
UDP服务器程序的具体要求如下:
(1)要求程序为命令行程序。例如,可执行文件名为UDPServer.exe,则程序的命令行格式如下。
UDPServer server_port
其中,server_port为服务器的服务端口。
(2)要求将UDP服务器的状态显示在控制台上,具体格式如下。
UDPServer接收命令:……
UDPServer发送命令:……
(3)要求有良好的编程规范和注释。
UDP客户机程序的具体要求如下:
(1)要求程序为命令行程序。例如,可执行文件名为UDPClient.exe,则程序的命令行格式如下。
UDPClient server_addr server_port command
其中,server_addr为服务器的IP地址,server_port为服务器的服务端口,command为客户机发送的命令。
(2)要求将UDP客户机的状态显示在控制台上,具体格式如下。
UDPClient 发送命令:……
UDPClient 接受命令:……
(3)要求有良好的编程规范和注释。
各位大哥,我是新手,了解不是很多,希望各位大哥帮我看下,如下代码,需要添加什么功能,才能完全上面的内容提要!shmilylee 发布留言 2008-10-30 17:13
客户端-服务器udp,由于每接到一条消息会开个线程去处理它
话不多说,直接代码
[code]
using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
using Entity;
namespace NetSocket
{
///
/// UDP通讯接收类
/// public class UDPReceive
{
///
/// 本地端口号
/// public int _localPort { get; set; }
///
/// 数据报(UDP)对象_接收
/// private UdpClient r_client;
///
/// 通讯时使用的编码,默认utf8
/// private Encoding enCoding = Encoding.UTF8;
///
/// 构造函数设置各项默认值
/// public UDPReceive()
{
this._localPort = StaticInfo._localPort;
}
///
/// 监听本机端口
/// public void runReceive()
{
r_client = new UdpClient(this._localPort);
AsyncCallback GetRecvBuffer = new AsyncCallback(ReceiveCallback);
r_client.BeginReceive(GetRecvBuffer, null);
}
///
/// 异步执行监听
/// ///
private void ReceiveCallback(IAsyncResult ar)
{
AsyncCallback GetRecvBuffer = new AsyncCallback(ReceiveCallback);
r_client.BeginReceive(GetRecvBuffer, null);
IPEndPoint endpoint = null;
byte[] bytes = r_client.EndReceive(ar, ref endpoint);
string strMsg = enCoding.GetString(bytes);
exeMessage execute = new exeMessage(strMsg);//接到消息然后去别的地方处理的
}
}
}
[/code]
[code]
using System.Net;
using System.Net.Sockets;
using System.Text;
using Entity;
namespace NetSocket
{
public class UDPSend
{
///
/// 客户端端口号
/// private int _clientPort;
///
/// 数据报(UDP)对象_发送
/// private UdpClient s_client;
///
/// 通讯时使用的编码,默认utf8
/// private Encoding enCoding = Encoding.UTF8;
public UDPSend()
{
this._clientPort = StaticInfo._clientPort;//设置端口的
}
///
/// 向指定地址发送消息
/// ///
发送地址
///
消息字符串
public void sendMessage(string address, string message)
{
if (message == null)
return;
byte[] bytes = enCoding.GetBytes(message);
s_client = new UdpClient();
try
{
s_client.Connect(address, this._clientPort);
s_client.Send(bytes, bytes.Length);
}
catch
{
}
finally
{
s_client.Close();
}
}
///
/// 发送消息广播
/// ///
消息字符串
public void sendBroadcast(string message)
{
//初始化一个Scoket实例,采用UDP传输
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
//初始化一个发送广播和指定端口的网络端口实例
IPEndPoint iep = new IPEndPoint(IPAddress.Broadcast, this._clientPort);
//设置该scoket实例的发送形式
sock.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, true);
byte[] bytes = enCoding.GetBytes(message);
sock.SendTo(bytes, iep);
sock.Close();
}
}
}
[/code]
页: [1]