游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1126|回复: 0

全面掌握VisualC#实现UDP协议(二) (1) wxh zt

[复制链接]

1367

主题

1993

帖子

2118

积分

金牌会员

Rank: 6Rank: 6

积分
2118
发表于 2004-11-26 17:20:00 | 显示全部楼层 |阅读模式

五.Visual C#实现网络对时系统之客户端程序的具体步骤:
客户端的程序比服务器端程序要复杂些,因为客户端程序不仅要往服务器端发送对时请求信息,接收服务器端反馈的日期和时间数据,还要提取这些时间和日期信息,并以此来修改本地端的日期和时间。参照上面实现网络对时系统服务器端程序,实现请求信息的发送和接收应相对要容易许多。所以客户端程序的关键就是根据获得的服务器端日期、时间数据来修改本地的日期、时间。在.Net FrameWork SDK 3705版本中并没有提供修改本地日期和时间的函数和类库,本文的实现办法是引入WinAPI函数,通过对应的WinAPI函数来更正本地时间和日期的,具体可参阅以下第十三和第十八步。

以下是Visual C#实现网络对时系统之客户端程序的具体实现步骤:

1.启动Visual Studio .Net。

2.选择菜单【文件】|【新建】|【项目】后,弹出【新建项目】对话框。

3.将【项目类型】设置为【Visual C#项目】。

4.将【模板】设置为【Windows应用程序】。

5.在【名称】文本框中输入【UDP对时客户端】。

6.在【位置】的文本框中输入【E:\VS.NET项目】,然后单击【确定】按钮。

7.【解决方案资源管理器】窗口中,双击Form1.cs文件,进入Form1.cs文件的编辑界面。

8.在Form1.cs文件的开头,用下列导入命名空间代码替换Form1.cs中缺省的导入命名空间代码。

using System.Collections ;
using System.ComponentModel ;
using System.Windows.Forms ;
using System.Data ;
using System.Net ;
using System.Net.Sockets ;
using System.Runtime.InteropServices ;
//程序引入WinAPI函数要使用到



9.把Visual Studio .Net的集成开发环境的当前窗口切换到【Form1.cs(设计)】窗体设计界面,并从【工具箱】中的【Windows窗体组件】中往窗体中拖入下列组件,并执行相应操作:

三个TextBox组件,分别用来输入服务器的IP地址,和显示本地时间、服务器的时间

二个Button组件,分别是button1和button2,在设计界面中分别双击button1和button2,系统会自动产生它们对应的Click事件处理代码。

三干个Label组件。

10.【解决方案资源管理器】窗口中,双击Form1.cs文件,进入Form1.cs文件的编辑界面。在Form1.cs中的namespace代码区添加下列代码,下列代码的功能是在程序中定义系统时间的结构体。

[ StructLayout (  LayoutKind.Sequential  )]
public class SystemTime
{
        public short year ;
        public short Month ;
        public short DayOfWeek ;
        public short Day ;
        public short Hour ;
        public short Minute ;
        public short Second ;
        public short Milliseconds ;
}
//定义系统时间的结构



11.在Form1.cs中的class代码区添加下列代码,下列代码的功能是定义程序中使用的全局变量。

private UdpClient client ;
//创建UDP网络服务
private IPEndPoint receivePoint ;
private int port = 8080 ;
//定义接收服务器端程序发送对时信息对应的端口号
private string timeString = DateTime.Now.ToString  ( ) ;
//存放时间日期信息字符串
private DateTime temp ;
//定义一个时间类型,用以修改当前时间和日期



1 2 下一页>>



【评论】 【推荐】 【大 中 小】 【打印】 【关闭】

    文章评论  
2004-04-13 14:52:13 limax   
将public class SystemTime 的定义,放到 class form1 的后面即可,需要在两台计算机上测试  
2004-04-06 14:46:58 lxisp   
端口在同一台机子上时,不能用同一个!修改其中一个!

2004-02-29 12:17:53 奋斗中。。。   
你将客户端的对于端口的定义改为8080以外的端口,但是这个端口呀没有被占用,如1235。

这里的对于客户端的实例化,添加端口号没有什么意义,只是用来实例化而已,不影响程序的运行。

8080端口已经被你的服务器端占用,所以才有你上面的出错的提示。  
2003-12-29 22:12:16 wanghouming   
[ StructLayout ( LayoutKind.Sequential )]
public class SystemTime
{
public short year ;
public short Month ;
public short DayOfWeek ;
public short Day ;
public short Hour ;
public short Minute ;
public short Second ;
public short Milliseconds ;
}
//定义系统时间的结构
public class SystemTime 出错,在一个命名空间里不能同时存在两个public类。我修改为public struct SystemTime 。可以运行,但连接服务端时出错提示“通常每个套接字地址(协议/网络地址/端口)只允许使用一次。”请指教,谢谢!



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

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-23 10:33

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表