下载此文档

TCP多客户端编程.pdf


文档分类:IT计算机 | 页数:约12页 举报非法文档有奖
1/12
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/12 下载此文档
文档列表 文档介绍
该【TCP多客户端编程 】是由【小s】上传分享,文档一共【12】页,该文档可以免费在线阅读,需要了解更多关于【TCP多客户端编程 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。:.
'使用到TcpListen类

'使用到StreamWriter类

'使用IPAddress类、IPHostEntry类等

PublicClassMyClient
ImplementsIDisposable
#Region"自定义变量"
'远程服务器IP地址
PrivateServerIPAsIPAddress
'远程服务器端口号码
PrivatePortNumAsInteger=0
'创建发送数据的网络基础数据流
PrivateSocketStreamAsNetworkStream
'用以向网络基础数据流传送数据
PrivateWriterAsBinaryWriter
'用以向网络基础数据流获得数据
PrivateReaderAsBinaryReader
'定义一个客户端对象
PrivateClientAsTcpClient
'客户名称
PrivateclientNameAsString
'执行状态消息以显示于窗体
PublicEventOnText(ByValmsgAsString)
'与远程服务器是否连接
PublicIsConnectedAsBoolean
#EndRegion
#Region"初始化远程服务器端口"
'''<summary>
'''初始化远程服务器端口定义
'''</summary>
SubNew(ByValSerIPAsIPAddress,ByValPortAsInteger,ByValTagAsString)
ServerIP=SerIP
PortNum=Port
clientName=Tag
EndSub
:.
'''<summary>
'''初始化远程服务器端口定义
'''</summary>
SubNew(ByValSerIPAsString,ByValPortAsInteger,ByValTagAsString)
ServerIP=(SerIP)
PortNum=Port
clientName=Tag
EndSub
#EndRegion
#Region"自定义过程"
'''<summary>
'''与远程服务器建立一个连接
'''</summary>
PublicSubConnet()
'初始化一个客户端对象,通过它实现向远程主机提出TCP连接申请
Client=NewTcpClient
Try
'对远程主机的5000端口提出TCP连接申请
(ServerIP,5000)
'通过申请,并获取传送数据的网络基础数据流
SocketStream=
'使用获取的网络基础数据流来初始化StreamReader实例
Reader=NewBinaryReader(SocketStream)
'使用获取的网络基础数据流来初始化StreamWriter实例
Writer=NewBinaryWriter(SocketStream)
'提醒服务器用户连接已经成功。
(clientName&"-连接成功"&vbCrLf)
IsConnected=True
RaiseEventOnText("服务器连接成功")
CatchexAsException
RaiseEventOnText("服务器连接失败,请检查")
EndTry
EndSub
'''<summary>
'''与远程服务器断开连接
'''</summary>
PublicSubDisConnect()
IsConnected=False
()
():.
()
EndSub
'''<summary>
'''获取服务器发送来的消息
'''</summary>
PublicFunctionGetMessage()AsString
DimstrMsgAsString=""
IfSocketStreamIsNothingThen
IsConnected=False
RaiseEventOnText("与服务器的连接已断开")
Return"与服务器的连接已断开"
EndIf
Reader=NewBinaryReader(SocketStream)
Try
strMsg=
RaiseEventOnText(strMsg)
ReturnstrMsg
CatchexAsIOException
SocketStream=Nothing
(50)
IsConnected=False
RaiseEventOnText()
Finally
Reader=Nothing
EndTry
ReturnstrMsg
EndFunction
'''<summary>
'''向服务器发送消息
'''</summary>
PublicSubSetMessage(ByValmsgAsString)
IfNotSocketStreamIsNothingThen
'Writer=NewBinaryWriter(SocketStream)
(clientName&">>>"&msg&vbCrLf)
'刷新当前数据流中的数据
()
Else
IsConnected=False
EndIf
EndSub
#EndRegion:.
#Region"IDisposableSupport"
PrivatedisposedValueAsBoolean'检测冗余的调用
'IDisposable
ProtectedOverridableSubDispose(ByValdisposingAsBoolean)

IfdisposingThen
'TODO:释放托管状态(托管对象)。
EndIf
()
()
()
Client=Nothing
Writer=Nothing
Reader=Nothing
SocketStream=Nothing
'TODO:释放非托管资源(非托管对象)并重写下面的Finalize()。
'TODO:将大型字段设置为null。
EndIf
=True
EndSub
'TODO:仅当上面的Dispose(ByValdisposingAsBoolean)具有释放非托管资源的代码
时重写Finalize()。
'ProtectedOverridesSubFinalize()
''不要更改此代码。请将清理代码放入上面的Dispose(ByValdisposingAsBoolean)
中。
'Dispose(False)
'()
'EndSub
'VisualBasic添加此代码是为了正确实现可处置模式。
PublicSubDispose()
'不要更改此代码。请将清理代码放入上面的Dispose(ByValdisposingAsBoolean)
中。
Dispose(True)
(Me)
EndSub
#EndRegion
EndClass
:.

ImportsSystem


PublicClassChatServer
ImplementsIDisposable
#Region"自定义变量"
PrivateReadOnlyServerIPAsIPAddress
PrivateReadOnlyPortNumAsInteger=5000
PrivateReadOnlyServerTagAsString
PrivateSocketListAsNewArrayList
PrivateMySocketAsSocket=Nothing
PrivatelistenerAsTcpListener
PrivateSocketStreamAsNetworkStream
PrivateWriterAsBinaryWriter
PrivateReaderAsBinaryReader
PrivateNewThreadAsThread=Nothing
PrivateIsStartedAsBoolean=False'服务器状态为未启动
PrivateClientCountAsInteger=0
ConstCMAXCOUNT=30'容许连接的最大客户端数目
PublicEventOnText(ByValNAsInteger,ByValmsgAsString)
PrivateIndexAsInteger
PublicClientRemoteEndPointAsString
#EndRegion
#Region"初始化服务器端口参数"
'''<summary>
'''初始化服务器端口参数
'''</summary>
SubNew(ByValSerIPAsIPAddress,ByValPortAsInteger,ByValSerTagAsString)
ServerIP=SerIP
PortNum=Port
ServerTag=SerTag
EndSub
'''<summary>:.
'''初始化服务器端口参数
'''</summary>
SubNew(ByValSerIPAsString,ByValPortAsInteger,ByValSerTagAsString)
ServerIP=(SerIP)
PortNum=Port
ServerTag=SerTag
EndSub
#EndRegion
#Region"属性区域"
'''<summary>
'''服务器连接状态
'''</summary>
PublicReadOnlyPropertyIsConnectedAsBoolean
Get
ReturnIsStarted
EndGet
EndProperty
#EndRegion
#Region"自定义过程"
'''<summary>
'''创建服务器
'''</summary>
PrivateSubStart()
Try
'创建一个侦听对象
listener=NewTcpListener(ServerIP,PortNum)
'启动服务器侦听端口
()
IsStarted=True
RaiseEventOnText(3,"服务器已启动")
WhileTrue
'连接客户端,返回一个套接字
IfClientCount<=CMAXCOUNTThen
MySocket=()
'添加到连接列表中
(MySocket)
ClientRemoteEndPoint=()
RaiseEventOnText(1,ClientRemoteEndPoint):.
SocketStream=NewNetworkStream(MySocket)
Writer=NewBinaryWriter(SocketStream)
'通知客户端,连接成功
("与服务器成功连接"&vbCrLf)'应该在什么时候断开该
连接
()
ClientCount+=1
Else
MySocket=()
SocketStream=NewNetworkStream(MySocket)
Writer=NewBinaryWriter(SocketStream)
'通知客户端,连接成功
("Server>>服务器的连接数已满,连接已经断开")
(False)'断开连接
EndIf
EndWhile
CatchexAsException
IsStarted=False
()
listener=Nothing
RaiseEventOnText(3,"服务器启动失败,请检查网络。")
Finally
SocketStream=Nothing
Writer=Nothing
MySocket=Nothing
EndTry
EndSub
'''<summary>
'''该方法在每个实例中仅容许使用一次
'''</summary>
PublicSubConnect()
IfNotIsStartedThen
Try
'创建新线程,用新的线程启动服务器
NewThread=NewThread(NewThreadStart(AddressOfStart))
="Threadforseverstart"
()
CatchexAsThreadStartException
MsgBox(,,"线程启动错误")
'线程创建失败时服务器启动失败
EndTry
Else
MsgBox("该实例中已经有一个服务器进程在运行,若要创建新的服务器请使:.
用其它实例",_
,"警告")
EndIf
EndSub
'''<summary>
'''断开一个连接
'''</summary>
PublicSubDisconnect(ByValindexAsInteger)
Try
DimconAsSocket=SocketList(index)
IfconIsNotNothingThen
(index)
ClientCount-=1
RaiseEventOnText(2,)
RaiseEventOnText(3,&"-连接断开")
()
EndIf
CatchexAsException
MsgBox("操作错误")
EndTry
EndSub
'''<summary>
'''服务器连接断开
'''</summary>
PublicSubClose()
Try
()
()
CatchexAsException
EndTry
EndSub
'''<summary>
'''发消息给指定客户端
'''</summary>
PublicSubSendMsg(ByValindexAsInteger,ByValmsgAsString)
DimConAsSocket
DimSocketStreamAsNetworkStream
DimSentMsgAsBinaryWriter
Try
Con=SocketList(index):.
SocketStream=NewNetworkStream(Con)
SentMsg=NewBinaryWriter(SocketStream)
(msg)'发送信息
RaiseEventOnText(3,"发送数据成功")
CatchexAsIndexOutOfRangeException
RaiseEventOnText(3,"发送数据失败")
MsgBox(,,"越界异常")
Finally
Con=Nothing
SocketStream=Nothing
SentMsg=Nothing
EndTry
EndSub
'''<summary>
'''发消息给所有客户端
'''</summary>
PublicSubSendMsg(OptionalByValmsgAsString="")
DimConAsSocket
DimSocketStreamAsNetworkStream
DimSentMsgAsBinaryWriter
Try
>0Then
ForIndex=-1
Try
Con=SocketList(Index)
IfConIsNothingThen
(300)
ContinueFor
EndIf
SocketStream=NewNetworkStream(Con)
SentMsg=NewBinaryWriter(SocketStream)
(msg)'发送信息
CatchexAsIOException
(Index)
ClientCount-=1
IfConIsNotNothingThen
RaiseEventOnText(2,)
RaiseEventOnText(3,&"-连
接断开")
RaiseEventOnText(3,"发送数据给所有客户时失败")
EndIf
ExitSub:.
Finally
Con=Nothing
SocketStream=Nothing
SentMsg=Nothing
EndTry
(300)
Next
Ifmsg=""Then
RaiseEventOnText(3,"自动发送数据给所有客户成功")
Else
RaiseEventOnText(3,"发送数据给所有客户成功")
EndIf
EndIf
(300)
CatchexAsException
RaiseEventOnText(3,"发送数据给所有客户时失败")
EndTry
EndSub
'''<summary>
'''接收客户的客户端消息
'''</summary>
PublicFunctionRecvieMsg()AsString
DimmsgAsString=""
DimConAsSocket
DimSStreamAsNetworkStream
DimiAsShort
Try
Fori=-1
Con=(i)

ExitFor
EndIf
=0Then
(30)
ContinueFor
EndIf
SStream=NewNetworkStream(Con)
Reader=NewBinaryReader(SStream)
Try
msg=
Returnmsg:.
CatchexAsSocketException
MsgBox()
Finally
Reader=Nothing
SStream=Nothing
Con=Nothing
EndTry
(30)
Next
CatchexAsException
EndTry
ReturnNothing
EndFunction
#EndRegion
PublicSharedFunctionGetMyFirstIPAddress()
Try
DimMyHostNameAsString=()
=
(MyHostName)
DimMyAddresses()=
DimIPAsString

IP=()
Dimtemp()AsString=(".")
()
Next
ReturnIP
CatchexAsException
MsgBox()
EndTry

EndFunction
#Region"IDisposableSupport"
PrivatedisposedValueAsBoolean'检测冗余的调用
'IDisposable
ProtectedOverridableSubDispose(ByValdisposingAsBoolean)

IfdisposingThen
'TODO:释放托管状态(托管对象)。:.
()
()
SocketList=Nothing
MySocket=Nothing
SocketStream=Nothing
Writer=Nothing
Reader=Nothing
NewThread=Nothing
listener=Nothing
IsStarted=False
ClientCount=0
EndIf
'TODO:释放非托管资源(非托管对象)并重写下面的Finalize()。
'TODO:将大型字段设置为null。
EndIf
=True
EndSub
'TODO:仅当上面的Dispose(ByValdisposingAsBoolean)具有释放非托管资源的代码
时重写Finalize()。
'ProtectedOverridesSubFinalize()
''不要更改此代码。请将清理代码放入上面的Dispose(ByValdisposingAsBoolean)
中。
'Dispose(False)
'()
'EndSub
'VisualBasic添加此代码是为了正确实现可处置模式。
PublicSubDispose()
'不要更改此代码。请将清理代码放入上面的Dispose(ByValdisposingAsBoolean)
中。
Dispose(True)
(Me)
EndSub
#EndRegion
EndClass

TCP多客户端编程 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数12
  • 收藏数0 收藏
  • 顶次数0
  • 上传人小s
  • 文件大小237 KB
  • 时间2022-12-04