- 热门文章:
- · 网上下载和上传数据(二) Montaque(原作)
- · 有空的时候看看,:)ASP.NET Page Templates
- · VB.NET开发互联网应用
- · vb.net cookie操作
- · Net中如何操作IIS(原理篇)
- · 关于选用何种ASP.NET设计方法的技巧
- · .Net中如何操作IIS(源代码) (原创)
- · iis 坏掉了,重新安装了以后.netframework 不能用了的解决方法
- · 两个aspx页面间传递引用对象。
- · 在Webcontrol的Toolbar上加入删除确认的方法(改进后)
- · TreeView 派生类: TreeViewEx 实现 NodeShowToolTip、NodeDoubleClick 事件
- · 我自己写的自定义Web的上传控件
上一篇:网上下载和上传数据(一) Montaque(原作) >>
一个SDK里做聊天室的例子(1)
Option Strict On
Imports System
Imports System.IO
Imports System.Text
Imports System.Threading
Imports System.Net
Imports System.Net.Sockets
Imports System.Drawing
Imports System.Windows.Forms
Imports Microsoft.VisualBasic
Class App
@#Entry point which delegates to C-style main Private Function
Public Overloads Shared Sub Main()
Main(System.Environment.GetCommandLineArgs())
End Sub
@# Entry point
Overloads Public Shared Sub Main(args() As String)
@# If the args parse in known way then run the app
If ParseArgs(args) Then
@# Create a custom Talker object
Dim talkerObj As New Talker(endPoint, client)
@# Pass the object reference to a new form object
Dim form As New TalkForm(talkerObj)
@# Start the talker "talking"
talkerObj.Start()
@# Run the applications message pump
Application.Run(form)
End If
End Sub @#Main
@# Parsed Argument Storage
Private Shared endPoint As IPEndPoint
Private Shared client As Boolean
@# Parse command line arguments
Private Shared Function ParseArgs(args() As String) As Boolean
Try
If args.Length = 1 Then
client = False
endPoint = New IPEndPoint(IPAddress.Any, 5150)
Return True
End If
Dim port As Integer
Select Case Char.ToUpper(args(1).ToCharArray()(1))
Case "L"c
port = 5150
If args.Length > 2 Then
port = Convert.ToInt32(args(2))
End If
endPoint = New IPEndPoint(IPAddress.Any, port)
client = False
Case "C"c
port = 5150
Dim address As String = "127.0.0.1"
client = True
If args.Length > 2 Then
address = args(2)
port = Convert.ToInt32(args(3))
End If
endPoint = New IPEndPoint(Dns.Resolve(address).AddressList(0), port)
Case Else
ShowUsage()
Return False
End Select
Catch
End Try
Return True
End Function @#ParseArgs
@# Show sample usage
Private 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 @#ShowUsage
End Class @#App
@# UI class for the sample
Class TalkForm
Inherits Form
Public Sub New(talkerObj As Talker)
@# Associate for method with the talker object
Me.talkerObj = talkerObj
AddHandler talkerObj.Notifications, AddressOf HandleTalkerNotifications
@# Create a UI elements
Dim 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 controls
receiveText.MaxLength = 65536
sendText.MaxLength = 65536
statusText = New Label()
@# Initialize UI elements
receiveText.Dock = DockStyle.Top
receiveText.Multiline = True
receiveText.ScrollBars = ScrollBars.Both
receiveText.Size = New Size(506, 192)
receiveText.TabIndex = 1
receiveText.Text = ""
receiveText.WordWrap = False
receiveText.ReadOnly = True
talkPanel.Anchor = AnchorStyles.Top Or AnchorStyles.Bottom Or AnchorStyles.Left Or AnchorStyles.Right
talkPanel.Controls.AddRange(New Control() {sendText, talkSplitter, receiveText})
talkPanel.Size = New Size(506, 371)
talkPanel.TabIndex = 0
talkSplitter.Dock = DockStyle.Top
talkSplitter.Location = New Point(0, 192)
talkSplitter.Size = New Size(506, 6)
talkSplitter.TabIndex = 2
talkSplitter.TabStop = False
statusText.Dock = DockStyle.Bottom
statusText.Location = New Point(0, 377)
statusText.Size = New Size(507, 15)
statusText.TabIndex = 1
statusText.Text = "Status:"
sendText.Dock = DockStyle.Fill
sendText.Location = New Point(0, 198)
sendText.Multiline = True
sendText.ScrollBars = ScrollBars.Both
sendText.Size = New Size(506, 173)
sendText.TabIndex = 0
sendText.Text = ""
sendText.WordWrap = False
AddHandler sendText.TextChanged, AddressOf HandleTextChange
sendText.Enabled = False
AutoScaleBaseSize = New Size(5, 13)
ClientSize = New Size(507, 392)
Controls.AddRange(New Control() {statusText, talkPanel})
Me.Text = "WinTalk"
Me.ActiveControl = sendText
End Sub @#New
@# When the app closes, dispose of the talker object
Protected Overrides Sub OnClosed(e As EventArgs)
If Not (talkerObj Is Nothing) Then
RemoveHandler talkerObj.Notifications, AddressOf HandleTalkerNotifications
talkerObj.Dispose()
End If
MyBase.OnClosed(e)
End Sub @#OnClosed
@# Handle notifications from the talker object
Private Sub HandleTalkerNotifications(notify As Talker.Notification, data As Object)
Select Case notify
Case Talker.Notification.Initialized
@# Respond to status changes
Case Talker.Notification.StatusChange
Dim statusObj As Talker.Status = CType(data, Talker.Status)
statusText.Text = String.Format("Status: {0}", statusObj)
If statusObj = Talker.Status.Connected Then
sendText.Enabled = True
End If
@# Respond to received text
Case Talker.Notification.Received
receiveText.Text = data.ToString()
receiveText.SelectionStart = Int32.MaxValue
receiveText.ScrollToCaret()
@# Respond to error notifications
Case Talker.Notification.ErrorNotify
Close(data.ToString())
@# Respond to end
Case Talker.Notification.EndNotify
MessageBox.Show(data.ToString(), "Closing WinTalk")
Close()
Case Else
Close()
End Select
End Sub @#HandleTalkerNotifications
@# Handle text change notifications and send talk
Private Sub HandleTextChange(sender As Object, e As EventArgs)
If Not (talkerObj Is Nothing) Then
talkerObj.SendTalk(CType(sender, TextBox).Text)
End If
End Sub @#HandleTextChange
@# Close with an explanation
Private OverLoads Sub Close(message As String)
MessageBox.Show(message, "Error!")
Close()
End Sub @#Close
@# Private UI elements
Private receiveText As TextBox
Private sendText As TextBox
Private statusText As Label
Private talkerObj As Talker
Private Sub TalkForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
Private Sub InitializeComponent()
@#
@#TalkForm
@#
Me.AutoScaleBaseSize = New System.Drawing.Size(6, 14)
Me.ClientSize = New System.Drawing.Size(292, 273)
Me.Name = "TalkForm"
End Sub
End Class @#TalkForm
@# An encapsulation of the Sockets class used for socket chatting
Class Talker
Implements IDisposable
@# Construct a talker
Public Sub New(endPoint As IPEndPoint, client As Boolean)
Me.endPoint = endPoint
Me.client = client
socket = Nothing
reader = Nothing
writer = Nothing
statusText = String.Empty
prevSendText = String.Empty
prevReceiveText = String.Empty
End Sub @#New
@# Finalize a talker
Overrides Protected Sub Finalize()
Dispose()
MyBase.Finalize()
End Sub @#Finalize
@# Dispose of resources and surpress finalization
Public Sub Dispose() Implements IDisposable.Dispose
GC.SuppressFinalize(Me)
If Not (reader Is Nothing) Then
reader.Close()
reader = Nothing
End If
If Not (writer Is Nothing) Then
writer.Close()
writer = Nothing
End If
If Not (socket Is Nothing) Then
socket.Close()
socket = Nothing
End If
End Sub @#Dispose
@# Nested delegate class and matchine event
Delegate Sub NotificationCallback(notify As Notification, data As Object)
Public Event Notifications As NotificationCallback
@# Nested enum for notifications
Public Enum Notification
Initialized = 1
StatusChange
Received
EndNotify
ErrorNotify
End Enum @#Notification
下一篇:网上下载和上传数据(二) Montaque(原作) >>
相关文章:
- · 增加判断文字长度,汉字算2个
- · 客户端脚本对中文的验证(javascript)
- · 献丑了,我的asp.net网站开发经验,欢迎参加讨论。
- · 笑望人生,关于IHttpHandler处理图片
- · HTML在线编辑器--服务器控件~~.NET实现~~
- · How to Share Session State Between Classic ASP and ASP.NET(1)
- · How to Share Session State Between Classic ASP and ASP.NET(2)
- · 关于验证控件,希望对和我原来有疑惑的朋友有帮助(刚找的资料,结合猫猫的)
- · 上次的一个问题我打了微软的求助电话,他们也没有办法!
- · [技巧]DataGird的hyper column的url field 绑定两个字段
- · ms--help
- · 续
- · Simple Paging in Repeater and DataList Controls
- · ASP.NET编程中的十大技巧(建议进精华)
- · 转贴:DataGrid/DataList
- · 用ASP.NET写你自己的代码生成器(1)。
- · ASP.NET中Cookie编程的基础知识(6)
- · ASP.NET中Cookie编程的基础知识(5)
- · ASP.NET中Cookie编程的基础知识(4)
- · ASP.NET中Cookie编程的基础知识(3)
- · ASP.NET中Cookie编程的基础知识(2)
- · ASP.NET中Cookie编程的基础知识(1)
- · .NET中窗体间相互访问的几种方式
- · .net中PictureBox中图片的拖动
- · 在.NET上如何根据字符串动态创建控件
- · .NET 窗体之间的交互
- · 使用UltraWinGrid时双击的处理
- · .Net 下的Wondows窗体常用项目
- · 在.net中实现与ASP完全兼容的MD5算法(包括中文字符)
- · .Net FrameWork SDK文档的例子演示
- · 利用.NET语言开发自己的脚本语言(一)
- · .NET中的数据类型的一些变化
- · 网上发现的文章(测试驱动开发)
- · .NET程序实现多语言
- · .NET Framework中使用XML Web Service(2)
- · .NET Framework中使用XML Web Service(1)
- · 管理三元式的新思路,涉及到查询时似乎可以借用Social Network的思想
- · 使用AOP微型框架的例子
