高分求C/S编程经验
以前没写过C/S 的东西,现在想尝试一下,VB.net做Svr端都有什么劣势吗?还有如果做即时通讯系统,服务器端都要做些什么工作呢?还请有经验的高手给些提示,万分感谢!分数不够,可加!希望大家参与讨论! 问题点数:100、回复次数:25Top
1 楼50277(柳影随风)回复于 2005-05-22 23:11:13 得分 2
任何的语言都有他的优势和劣势!关键是看自己的掌握程度!做即时通信系统可以用TCP/IP 协议或UDP协议来做!Top
2 楼0412Rainbow(彩虹)回复于 2005-05-24 21:42:13 得分 0
我知道用UDP去做,楼上的可能是没有明白我的意思,我也知道每种语言都有它的优势,我说的是如果用VB.net做SVR都有哪些不好的地方,因为以前没有做过,是否能达到最好的性能.另外就是Svr端都需要做些什么工作,大家给点提示啊!谢.Top
3 楼0412Rainbow(彩虹)回复于 2005-05-28 22:01:12 得分 0
怎么还是没有回复啊~郁闷~大家给小弟说说啊~Top
4 楼50277(柳影随风)回复于 2005-05-31 22:12:20 得分 3
没仔细看楼主的问题!答偏了!道个谦!
但经验这个东西说不怎么出来!毕竟是一点一滴积累的,不是一天两天就能学到的!非要说传授经验的话就只能是多做,遇到问题在出来问声,做多了,经验就出来的!是做出来的!!!!!!!!Top
5 楼0412Rainbow(彩虹)回复于 2005-06-01 10:53:09 得分 0
楼上的大哥.客气了.我没做过C/S的东西,就是想知道S端大概都要做些什么样的工作.现在做S端,大部分人都用C去做吧~我想知道如果用Vb.net去做会在性能上有多大的劣势~嘿嘿~感谢50277(柳影随风)的关注.Top
6 楼zhanqiangz(闲云野鹤-Overriding)回复于 2005-06-01 11:07:14 得分 5
很希望有高手来指点c/s的开发技术!
一直做b/s的。Top
7 楼0412Rainbow(彩虹)回复于 2005-06-01 11:17:09 得分 0
B/s中,S端都大概要做些什么工作啊~应该和C/s中的S端类似吧~
工作的内容应该是一样的,实现的细节是不同的吧~Top
8 楼Snrmnm_sx(Ψ 踏雪无痕 Ω)回复于 2005-06-01 11:22:23 得分 15
本文将介绍如何创建一个三层应用程序,并且将介绍如何创建一个Web Service服务。
ADO.NET创建Windows三层结构应用程序的体系架构如下图所示:
该结构分三个层次:表示层、业务层、数据层。
数据层:代表物理数据库。
业务层:负责数据层与表示层之间的数据传输。
表示层:应用程序的客户端,它通过业务层来访问数据库。
表示层所操作的是驻留在内存中的本地数据,当需要更新数据库数据时,要通过业务层提供的更新方法实现。这样可以大大提高应用程序的性能,而且,什么时候更新数据完全由你决定,提高了编程的灵活性。
2.实例:
这里我们具体做一个实例来看看如何用VB.NET创建三层结构的应用程序。
数据库:我们选择SQL SERVER 的NorthWind数据库。
业务层:我们创建一个WebService作为中间层。(需要安装IIS服务)
表示层:我们写一个Windows Form
第一步:创建WebService。
具体步骤如下:
1. 新建一个项目,选择ASP.NET Web服务,命名为:”WebService For 业务层”。
2. 添加两个Sql DataAdapter,一个为Customer_da,它指向NorthWind数据库的Customers表,另一个为Order_da,指向Northwind数据库的Orders表。
3. 然后生成一个Typed DataSet(选择“数据”菜单的“生成数据集”),命名为:Super_ds.
4. 数据库连接已经完成,下一步我们将考虑它与表示层之间的通信,这里我们定义两个方法。一个为:Get_DataSet,它返回一个Super_ds类型的数据集,另一个为:Update_DataSet,它负责更新数据库数据, 方法代码如下:
<WebMethod()> Public Function Get_Dataset() As super_ds
customer_da.Fill(Super_ds1.Customers)
order_da.Fill(Super_ds1.Orders)
Return Super_ds1
End Function
<WebMethod()> Public Sub Update_Dataset()
Super_ds1.AcceptChanges()
End Sub
你可以运行测试一下你建立的这个WebService。它将提供两个方法。返回的DataSet是以XML表示的。
业务层的完整代码如下:
Imports System.Web.Services
Public Class Service1
Inherits System.Web.Services.WebService
‘Web Services Designer Generated Code…….
<WebMethod()> Public Function Get_Dataset() As super_ds
customer_da.Fill(Super_ds1.Customers)
order_da.Fill(Super_ds1.Orders)
Return Super_ds1
End Function
<WebMethod()> Public Sub Update_Dataset()
Super_ds1.AcceptChanges()
End Sub
' WEB SERVICE EXAMPLE
' The HelloWorld() example service returns the string Hello World.
' To build, uncomment the following lines then save and build the project.
' To test this web service, ensure that the .asmx file is the start page
' and press F5.
'
'<WebMethod()> Public Function HelloWorld() As String
' HelloWorld = "Hello World"
' End Function
End Class
第二步:创建表示层
具体步骤如下:
1. 新建一个Windows应用程序,命名为:“Windows Form For 表示层”。
2. 在窗体上添加一个DataGrid,一个Button,Button1的text为“Load”,作用是:从业务层读取数据。
3. 在解决方案窗体中添加Web 引用,将我们自己建立的Web Service for 业务层引入到当前项目中。
4. 向Button1的Click事件添加如下代码:
Dim Customer_Ds As New localhost.super_ds()
Dim ser1 As New localhost.Service1()
Customer_Ds.Merge(ser1.Get_Dataset)
DataGrid1.DataSource = Customer_Ds
这里我们调用了Web Service的Get_DataSet函数,Update_DataSet方法的调用与此完全相同。
表示层的完整代码如下:
Imports Data_Access_表示层
Public Class Form1
Inherits System.Windows.Forms.Form
#Region " Windows Form Designer generated code "
Public Sub New()
MyBase.New()
'This call is required by the Windows Form Designer.
InitializeComponent()
'Add any initialization after the InitializeComponent() call
End Sub
'Form overrides dispose to clean up the component list.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
Friend WithEvents Button1 As System.Windows.Forms.Button
Friend WithEvents Button2 As System.Windows.Forms.Button
Friend WithEvents Button3 As System.Windows.Forms.Button
Friend WithEvents Client_DataSet As Data_Access_表示层.localhost.super_ds
Friend WithEvents DataGrid1 As System.Windows.Forms.DataGrid
'Required by the Windows Form Designer
Private components As System.ComponentModel.Container
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Me.Button1 = New System.Windows.Forms.Button()
Me.Button2 = New System.Windows.Forms.Button()
Me.Button3 = New System.Windows.Forms.Button()
Me.Client_DataSet = New Data_Access_表示层.localhost.super_ds()
Me.DataGrid1 = New System.Windows.Forms.DataGrid()
CType(Me.Client_DataSet, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.DataGrid1, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout()
'
'Button1
'
Me.Button1.Location = New System.Drawing.Point(88, 360)
Me.Button1.Name = "Button1"
Me.Button1.TabIndex = 0
Me.Button1.Text = "load"
'
'Button2
'
Me.Button2.Location = New System.Drawing.Point(232, 360)
Me.Button2.Name = "Button2"
Me.Button2.TabIndex = 1
Me.Button2.Text = "update"
'
'Button3
'
Me.Button3.Location = New System.Drawing.Point(376, 360)
Me.Button3.Name = "Button3"
Me.Button3.TabIndex = 2
Me.Button3.Text = "clear"
'
'Client_DataSet
'
Me.Client_DataSet.DataSetName = "Client_DataSet"
Me.Client_DataSet.Locale = New System.Globalization.CultureInfo("zh-CN")
Me.Client_DataSet.Namespace = "http://www.tempuri.org/CustomerDs.xsd"
'
'DataGrid1
'
Me.DataGrid1.DataMember = ""
Me.DataGrid1.Location = New System.Drawing.Point(40, 56)
Me.DataGrid1.Name = "DataGrid1"
Me.DataGrid1.Size = New System.Drawing.Size(480, 264)
Me.DataGrid1.TabIndex = 3
'
'Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(6, 14)
Me.ClientSize = New System.Drawing.Size(568, 429)
Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.DataGrid1, Me.Button3, Me.Button2, Me.Button1})
Me.Name = "Form1"
Me.Text = "Form1"
CType(Me.Client_DataSet, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.DataGrid1, System.ComponentModel.ISupportInitialize).EndInit()
Me.ResumeLayout(False)
End Sub
#End Region
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim Customer_Ds As New localhost.super_ds()
Dim ser1 As New localhost.Service1()
Customer_Ds.Merge(ser1.Get_Dataset)
DataGrid1.DataSource = Customer_Ds
End Sub
End Class
总结:可见,表示层窗体上完全没有数据库连接控件,它与数据库的连接任务是通过业务层来完成的,这样,程序的结构更加清晰,当然业务层的实现也可以用其他方法,比如:写一个自己的类来完成与数据库的数据传输。
Top
9 楼Snrmnm_sx(Ψ 踏雪无痕 Ω)回复于 2005-06-01 11:24:13 得分 0
楼主希望楼上的例子能帮上你的忙!Top
10 楼50277(柳影随风)回复于 2005-06-01 12:09:01 得分 10
C/S结构 楼主可以想得简单点:每个客户端都必须安装一个应用程序,通常用于局域网内部,是企业内部的管理系统,优点是速度快,功能强大,缺点是如果系统有新版本产生,那就必须每个客户端都德重新安装(维护比较麻烦).Top
11 楼mozhmozl(暗夜精灵)回复于 2005-06-01 15:03:20 得分 2
初学帮顶一个Top
12 楼0412Rainbow(彩虹)回复于 2005-06-02 10:40:24 得分 0
感谢楼上的几位的回复,即时通讯系统应该是用的C/S的吧~偶现在想知道即时通讯系统的S端都要做些什么工作,希望大家继续参与讨论.分不够,开新帖加!Top
13 楼noway8881(老虎不发威,你当我是Hello Kitty)回复于 2005-06-02 13:00:53 得分 5
你可以下下tencent的S端看看。
性能上,.net版本的c/s要比java的c/s要好。其他的.......
下一个winXP总管,做什么优化时都特别慢。哎Top
14 楼50277(柳影随风)回复于 2005-06-02 13:33:50 得分 50
我有个例子,C/S结构的,不算严格意义上的三层,但还可以,楼主感兴趣的话留个油箱!Top
15 楼0412Rainbow(彩虹)回复于 2005-06-04 20:33:19 得分 0
感谢楼上的.我的邮箱是0412rainbow@163.com
tencent的S端可以下载吗?哪里有啊~Top
16 楼dengxw(威威)回复于 2005-06-04 21:59:29 得分 2
tencent的S端可以下载吗?哪里有啊~
我对这个感兴趣~呵呵~
有人提示下哪里有可以看看?~Top
17 楼50277(柳影随风)回复于 2005-06-05 11:58:19 得分 0
TO;0412Rainbow(彩虹)
收一下邮箱,刚发的!Top
18 楼0412Rainbow(彩虹)回复于 2005-06-07 13:11:28 得分 0
看到邮件了,呵呵,谢谢。大家继续讨论。参与就有分~Top
19 楼dingjuntm(大山)回复于 2005-06-07 21:37:06 得分 2
学习!Top
20 楼zeusvenus()回复于 2005-06-07 22:52:01 得分 2
其实这和VB.NET语言关系不大,是个普遍性的问题,做得好坏影响因素太多了。Top
21 楼pshy(无心)回复于 2005-06-08 00:31:37 得分 2
50277(柳影随风)
可以发一份给我参考下吗?
谢谢!
sgc_hy@163.comTop
22 楼50277(柳影随风)回复于 2005-06-08 12:02:00 得分 0
to pshy(无心)
收一下!发了!Top
23 楼0412Rainbow(彩虹)回复于 2005-06-08 12:11:09 得分 0
50277我加你Q了啊`你接受了没啊~Top
24 楼50277(柳影随风)回复于 2005-06-08 13:03:11 得分 0
没得到信息!
316558530Top
25 楼0412Rainbow(彩虹)回复于 2005-07-08 16:09:47 得分 0
结贴了,说实在的,收获甚微,以至在结贴的之后都无法把分数分配出去,不过还是要感谢各位的热心支持,也很高兴能认识各位.希望大家以后有经验可以一起交流!谢谢.我的QQ:95794285 验证csdn
邮箱:0412rainbow@163.com 谢谢Top




