标题:请教基于UDP的客户服务器模式的实现?给小弟我参考下,谢谢!
只看楼主
青苔
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2008-10-5
 问题点数:0 回复次数:2 
请教基于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)要求有良好的编程规范和注释。
各位大哥,我是新手,了解不是很多,希望各位大哥帮我看下,如下代码,需要添加什么功能,才能完全上面的内容提要!
搜索更多相关主题的帖子: UDP 服务器 客户 模式 
2008-10-30 16:08
shmilylee
Rank: 2
来 自:江苏扬州蹩脚小公司
等 级:论坛游民
威 望:2
帖 子:242
专家分:22
注 册:2007-7-6
得分:0 
客户端-服务器udp,由于每接到一条消息会开个线程去处理它
话不多说,直接代码
程序代码:
using System;
using System.Text;
using   Entity;

namespace NetSocket
{
    /// <summary> 
    /// UDP通讯接收类
    /// </summary> 
    public class UDPReceive
    {
        /// <summary>
        /// 本地端口号
        /// </summary>
        public int _localPort { get; set; }
        /// <summary>
        /// 数据报(UDP)对象_接收
        /// </summary>
        private UdpClient r_client;
        /// <summary>
        /// 通讯时使用的编码,默认utf8
        /// </summary>
        private Encoding enCoding = Encoding.UTF8;

        /// <summary> 
        /// 构造函数设置各项默认值 
        /// </summary> 
        public UDPReceive()
        {
            this._localPort = StaticInfo._localPort;
        }

        /// <summary>
        /// 监听本机端口
        /// </summary>
        public void runReceive()
        {
            r_client = new UdpClient(this._localPort);
            AsyncCallback GetRecvBuffer = new AsyncCallback(ReceiveCallback);
            r_client.BeginReceive(GetRecvBuffer, null);
        }

        /// <summary>
        /// 异步执行监听
        /// </summary>
        /// <param name="ar"></param>
        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);//接到消息然后去别的地方处理的
        }
    }
}


程序代码:
using   System.Text;
using Entity;

namespace NetSocket
{
    public class UDPSend
    {
        /// <summary>
        /// 客户端端口号
        /// </summary>
        private int _clientPort;
        /// <summary>
        /// 数据报(UDP)对象_发送
        /// </summary>
        private UdpClient s_client;
        /// <summary>
        /// 通讯时使用的编码,默认utf8
        /// </summary>
        private Encoding enCoding = Encoding.UTF8;

        public UDPSend()
        {
            this._clientPort = StaticInfo._clientPort;//设置端口的
        }

        /// <summary>
        /// 向指定地址发送消息
        /// </summary>
        /// <param name="address">发送地址</param>
        /// <param name="bytes">消息字符串</param>
        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();
            }
        }

        /// <summary>
        /// 发送消息广播
        /// </summary>
        /// <param name="message">消息字符串</param>
        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();
        }
    }
}


太可恶了,居然不能超过100个字符!
这区区100个又怎么能概括我平凡而又伟大的一生!
2008-10-30 17:13
青苔
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2008-10-5
得分:0 
运行不了....求救...
2008-11-24 15:01



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-241524-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018794 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved