一个SDK里做聊天室的例子(1)


所属类别:.NET

文章作者:佚名

特别推荐:免费发布信息 承包关键词~~抢爆了!HOT!


Option Explicit OnOption Strict OnImports SystemImports System.IOImports System.TextImports System.ThreadingImports System.NetImports System.Net.SocketsImports System.DrawingImports System.Windows.FormsImports Microsoft.VisualBasic Class App'Entry point which delegates to C-style main Private FunctionPublic Overloads Shared Sub Main()Main(System.Environment.GetCommandLineArgs())End Sub' Entry pointOverloads Public Shared Sub Main(args() As String)' If the args parse in known way then run the appIf ParseArgs(args) Then' Create a custom Talker objectDim talkerObj As New Talker(endPoint, client)' Pass the object reference to a new form objectDim form As New TalkForm(talkerObj)' Start the talker "talking"talkerObj.Start()' Run the applications message pumpApplication.Run(form)End IfEnd Sub 'Main' Parsed Argument StoragePrivate Shared endPoint As IPEndPointPrivate Shared client As Boolean' Parse command line argumentsPrivate Shared Function ParseArgs(args() As String) As BooleanTryIf args.Length = 1 Thenclient = FalseendPoint = New IPEndPoint(IPAddress.Any, 5150)Return TrueEnd IfDim port As IntegerSelect Case Char.ToUpper(args(1).ToCharArray()(1))Case "L"cport = 5150If args.Length > 2 Thenport = Convert.ToInt32(args(2))End IfendPoint = New IPEndPoint(IPAddress.Any, port)client = FalseCase "C"cport = 5150Dim address As String = "127.0.0.1"client = TrueIf args.Length > 2 Thenaddress = args(2)port = Convert.ToInt32(args(3))End IfendPoint = New IPEndPoint(Dns.Resolve(address).AddressList(0), port)Case ElseShowUsage()Return FalseEnd SelectCatchEnd TryReturn TrueEnd Function 'ParseArgs' Show sample usagePrivate Shared Sub ShowUsage()MessageBox.Show("WinTalk [switch] [parameters...]" & ControlChars.CrLf & ControlChars.CrLf & _"/L[port]" & ControlChars.Tab & ControlChars.Tab & "-- Listens on a port.Default:5150" & ControlChars.CrLf & _"/C[address] [port]" & ControlChars.Tab & "-- Connects to an address and port." & ControlChars.CrLf & ControlChars.CrLf & _"Example Server - " & ControlChars.CrLf & _"Wintalk /L" & ControlChars.CrLf & ControlChars.CrLf & _"Example Client - " & ControlChars.CrLf & _"Wintalk /C ServerMachine 5150", "WinTalk Usage")End Sub 'ShowUsageEnd Class 'App' UI class for the sampleClass TalkFormInherits FormPublic Sub New(talkerObj As Talker)' Associate for method with the talker objectMe.talkerObj = talkerObjAddHandler talkerObj.Notifications, AddressOf HandleTalkerNotifications' Create a UI elementsDim talkSplitter As New Splitter()Dim talkPanel As New Panel()receiveText = New TextBox()sendText = New TextBox()'we'll support up to 64k data in our text box controlsreceiveText.MaxLength = 65536sendText.MaxLength = 65536statusText = New Label()' Initialize UI elementsreceiveText.Dock = DockStyle.TopreceiveText.Multiline = TruereceiveText.ScrollBars = ScrollBars.BothreceiveText.Size = New Size(506, 192)receiveText.TabIndex = 1receiveText.Text = ""receiveText.WordWrap = FalsereceiveText.ReadOnly = TruetalkPanel.Anchor = AnchorStyles.Top Or AnchorStyles.Bottom Or AnchorStyles.Left Or AnchorStyles.RighttalkPanel.Controls.AddRange(New Control() {sendText, talkSplitter, receiveText})talkPanel.Size = New Size(506, 371)talkPanel.TabIndex = 0talkSplitter.Dock = DockStyle.ToptalkSplitter.Location = New Point(0, 192)talkSplitter.Size = New Size(506, 6)talkSplitter.TabIndex = 2talkSplitter.TabStop = FalsestatusText.Dock = DockStyle.BottomstatusText.Location = New Point(0, 377)statusText.Size = New Size(507, 15)statusText.TabIndex = 1statusText.Text = "Status:"sendText.Dock = DockStyle.FillsendText.Location = New Point(0, 198)sendText.Multiline = TruesendText.ScrollBars = ScrollBars.BothsendText.Size = New Size(506, 173)sendText.TabIndex = 0sendText.Text = ""sendText.WordWrap = FalseAddHandler sendText.TextChanged, AddressOf HandleTextChangesendText.Enabled = FalseAutoScaleBaseSize = New Size(5, 13)ClientSize = New Size(507, 392)Controls.AddRange(New Control() {statusText, talkPanel})Me.Text = "WinTalk"Me.ActiveControl = sendTextEnd Sub 'New' When the app closes, dispose of the talker objectProtected Overrides Sub OnClosed(e As EventArgs)If Not (talkerObj Is Nothing) ThenRemoveHandler talkerObj.Notifications, AddressOf HandleTalkerNotificationstalkerObj.Dispose()End IfMyBase.OnClosed(e)End Sub 'OnClosed' Handle notifications from the talker objectPrivate Sub HandleTalkerNotifications(notify As Talker.Notification, data As Object)Select Case notifyCase Talker.Notification.Initialized' Respond to status changesCase Talker.Notification.StatusChangeDim statusObj As Talker.Status = CType(data, Talker.Status)statusText.Text = String.Format("Status: {0}", statusObj)If statusObj = Talker.Status.Connected ThensendText.Enabled = TrueEnd If' Respond to received textCase Talker.Notification.ReceivedreceiveText.Text = data.ToString()receiveText.SelectionStart = Int32.MaxValuereceiveText.ScrollToCaret()' Respond to error notificationsCase Talker.Notification.ErrorNotifyClose(data.ToString())' Respond to endCase Talker.Notification.EndNotifyMessageBox.Show(data.ToString(), "Closing WinTalk")Close()Case ElseClose()End SelectEnd Sub 'HandleTalkerNotifications' Handle text change notifications and send talkPrivate Sub HandleTextChange(sender As Object, e As EventArgs)If Not (talkerObj Is Nothing) ThentalkerObj.SendTalk(CType(sender, TextBox).Text)End IfEnd Sub 'HandleTextChange' Close with an explanationPrivate OverLoads Sub Close(message As String)MessageBox.Show(message, "Error!")Close()End Sub 'Close' Private UI elementsPrivate receiveText As TextBoxPrivate sendText As TextBoxPrivate statusText As LabelPrivate talkerObj As TalkerPrivate Sub TalkForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.LoadEnd SubPrivate Sub InitializeComponent()''TalkForm'Me.AutoScaleBaseSize = New System.Drawing.Size(6, 14)Me.ClientSize = New System.Drawing.Size(292, 273)Me.Name = "TalkForm"End SubEnd Class 'TalkForm' An encapsulation of the Sockets class used for socket chattingClass TalkerImplements IDisposable' Construct a talkerPublic Sub New(endPoint As IPEndPoint, client As Boolean)Me.endPoint = endPointMe.client = clientsocket = Nothingreader = Nothingwriter = NothingstatusText = String.EmptyprevSendText = String.EmptyprevReceiveText = String.EmptyEnd Sub 'New' Finalize a talkerOverrides Protected Sub Finalize()Dispose()MyBase.Finalize()End Sub 'Finalize' Dispose of resources and surpress finalizationPublic Sub Dispose() Implements IDisposable.DisposeGC.SuppressFinalize(Me)If Not (reader Is Nothing) Thenreader.Close()reader = NothingEnd IfIf Not (writer Is Nothing) Thenwriter.Close()writer = NothingEnd IfIf Not (socket Is Nothing) Thensocket.Close()socket = NothingEnd IfEnd Sub 'Dispose' Nested delegate class and matchine eventDelegate Sub NotificationCallback(notify As Notification, data As Object)Public Event Notifications As NotificationCallback' Nested enum for notificationsPublic Enum NotificationInitialized = 1StatusChangeReceivedEndNotifyErrorNotifyEnd Enum 'Notification<
关闭本页

相关信息

· 让你拥有自己的QQ在线显示代码(又是转,呵呵)

·  给刚毕业进入企业的同学的建议

· SQL Anywhere教程(三):配置连接Windows CE数据库

· 千招百式,玩“活”Word打印








....

81368 93541