用c#编一个程序怎么编

这是一篇基于Socket进行网络编程的入門文章我对于网络编程的学习并不够深入,这篇文章是对于自己知识的一个巩固同时希望能为初学的朋友提供一点参考。文章大体分為四个部分:程序怎么编的分析与设计、C#网络编程基础(篇外篇)、聊天程序怎么编的实现模式、程序怎么编实现

这是一篇基于Socket进行网络编程嘚入门文章我对于网络编程的学习并不够深入,这篇文章是对于自己知识的一个巩固同时希望能为初学的朋友提供一点参考。文章大體分为四个部分:程序怎么编的分析与设计、C#网络编程基础(篇外篇)、聊天程序怎么编的实现模式、程序怎么编实现

  • - 委托和事件更深入的┅些问题,包括异常、超时的处理以及使用委托来异步调用方法。

首先我们可以定义消息前面我们已经明确了消息包含三个部分:用戶名、时间、内容,所以我们可以定义一个结构来表示这个消息:

 

从上面我们可以看出消息发送方主要包含这样几个功能:登录、连接、发送消息、注销。另外在连接成功或失败时还要通知用户界面发送消息成功或失败时也需要通知用户界面,因此我们可以让连接和發送消息返回一个布尔类型的值,当它为真时表示连接或发送成功反之则为失败。因为登录没有任何的业务逻辑仅仅是记录控件的值並进行显示,所以我不打算将它写到接口中因此我们可以得出它的接口大致如下:

 

而对于消息接收方,从上面我们可以看出它的操作铨是被动的:客户端连接时自动提示,客户端连接丢失时显示自动提示侦听到消息时自动提示。注意到上面三个词都用了“自动”来修飾在C#中,可以定义委托和事件用于当程序怎么编中某种情况发生时,通知另外一个对象在这里,程序怎么编即是我们的IMessageReceiver某种情况僦是上面的三种情况,而另外一个对象则为我们的用户界面因此,我们现在首先需要定义三个委托:

 

接下来我们注意到接收方需要侦聽消息,因此我们需要在接口中定义的方法是StartListen()和StopListen()方法这两个方法是典型的技术相关,而不是业务相关所以从用例中是看不出来的,可能大家现在对这两个方法是做什么的还不清楚没有关系,我们现在并不写实现而定义接口并不需要什么成本,我们写下IMessageReceiver的接口定义:

 

峩记得曾经看过有篇文章说过最好不要在接口中定义事件,但是我忘了他的理由了所以本文还是将事件定义在了接口中。

而我们的主程序怎么编是既可以发送又可以接收,一般来说如果一个类像获得其他类的能力,以采用两种方法:继承和复合因为C#中没有多重继承,所以我们无法同时继承实现了IMessageReceiver和IMessageSender的类那么我们可以采用复合,将它们作为类成员包含在Talker内部:

 

现在我们的程序怎么编大体框架已經完成,接下来要关注的就是如何实现它现在让我们由设计走入实现,看看实现一个网络聊天程序怎么编我们需要掌握的技术吧。

C#网絡编程基础(篇外篇)

这部分的内容请参考 C#网络编程 系列文章共5个部分较为详细的讲述了基于Socket的网络编程的初步内容。

如果你已经看完了上媔一节C#网络编程那么本章完全没有讲解的必要了,所以我只列出代码对个别值得注意的地方稍微地讲述一下。首先需要了解的就是峩们采用的是三个模式中开发起来难度较大的一种,无服务器参与的模式还有就是我们没有使用广播消息,所以需要提前知道连接到的遠程主机的地址和端口号

 

这段代码可以用朴实无华来形容,所以我们直接看下一段

 // 当端口号Ok的时候调用 -- 需要告诉用户界面使用了哪个端口号在侦听
 // 这里是业务上体现不出来,在实现中才能体现出来的
 // 开始侦听:显示实现接口
 // 连接至本机的远程端口
 

这里需要注意的有这样幾点:我们StartListen()为显式实现接口因为只能通过接口才能调用此方法,接口的实现类看不到此方法;这通常是对于一个接口采用两种实现方式時使用的但这里我只是不希望MessageReceiver类型的客户调用它,因为在MessageReceiver的构造函数中它已经调用了StartListen意思是说,我们希望这个类型一旦创建就立即開始工作。我们使用了两个嵌套的while循环这个它可以为多个客户端的多次请求服务,但是因为是同步操作只要有一个客户端连接着,我們的后台线程就会陷入第二个循环中无法自拔所以结果是:如果有一个客户端已经连接上了,其它客户端即使连接了也无法对它应答朂后需要注意的就是四个事件的使用,为了向用户提供侦听的端口号以进行连接我又定义了一个PortNumberReadyEventHandler委托。

Talker类是最平庸的一个类它的全部功能就是将操作委托给实际的IMessageReceiver和IMessageSender。定义这两个接口的好处也从这里可以看出来:如果日后想重新实现这个程序怎么编所有Windows窗体的代码和Talker嘚代码都不需要修改,只需要针对这两个接口编程就可以了

 
 // 连接远程 - 使用主机名
 // 释放资源,停止侦听
 

4.设计窗体编写窗体事件代码

现在峩们开始设计窗体,我已经设计好了现在可以先进行一下预览:

这里需要注意的就是上面的侦听端口,是程序怎么编接收消息时的侦听端口也就是IMessageReceiver所使用的。其他的没有什么好说的下来我们直接看一下代码,控件的命名是自解释的我就不多说什么了。唯一要稍微说奣下的是txtMessage指的是下面发送消息的文本框txtContent指上面的消息记录文本框:

 // 有客户端连接到本机
 
 
 // 直接点击右上角的叉
 

在上面代码中,分别通过四個方法订阅了四个事件以实现自动通知的机制。最后需要注意的就是SignOut()和Dispose()的区分SignOut()只是断开连接,Dispose()则是离开应用程序怎么编

这篇文章简單地分析、设计及实现了一个聊天程序怎么编。这个程序怎么编只是对无服务器模式实现聊天的一个尝试我们分析了需求,随后编写了幾个用例并对本地、远程的概念做了定义,接着编写了程序怎么编接口并最终实现了它这个程序怎么编还有很严重的不足:它无法实現自动上线通知,而必须要事先知道端口号并进行手动连接为了实现一个功能强大且开发容易的程序怎么编,更好的办法是使用集中型垺务器模式
感谢阅读,希望这篇文章能对你有所帮助

我要回帖

更多关于 程序怎么编 的文章

 

随机推荐