我需要打开几个对象:两个插槽,每个插槽都有一个Stream
和一个Writer
,一个管道带有......
我可以将它们存储在哈希中,以便我只使用哈希调用一个函数,在该函数中我可以访问特定的套接字,流或编写器吗?
如何预定义此哈希条目?
$hash = @{
...
"Socket" = ???
"Stream" = ???
"Writer" = ???
...
}
function connect {
param([hashtable] $h)
try {
$Enc = [System.Text.Encoding]::ASCII
$h.Socket = New-Object System.Net.Sockets.TcpClient $h.IP, $h.PORT
$h.Stream = $h.Socket.GetStream() # Or better: $($h.Socket).GetStream()
$h.Writer = New-Object System.IO.StreamWriter($h.Stream, $Enc)
...
}
catch { ...}
...
}
并使用所有:
function WriteMsg {
param([hashtable]]$h, [string]]$m)
try {
$h.Writer.Write($m) #
}
catch {
Write-Host $_ #Write-Debug $_
}
}
会保存使用吗?
PS:
对于那些可能感兴趣的人来说,这似乎有用 - 到目前为止:
$Conn1 = New-Object psobject -Property @{
"ID" = "Conn1"
"State" = "ok"
"IP" = "127.0.0.1"
"PORT" = 4711
"Socket" = $Null
"Stream" = $Null
"Writer" = $Null
}
function conn { # Usage: conn $Conn1
param (
[parameter(Mandatory=$true)]
[PSObject] $h
)
try {
$e = [System.Text.Encoding]::ASCII
$h.Socket = $(New-Object System.Net.Sockets.TcpClient $h.IP, $h.PORT)
if ($h.Socket.Connected) {
$h.Stream = $($h.Socket.GetStream())
$h.Writer = $(New-Object System.IO.StreamWriter( $h.Stream, $e))
$h.Writer.AutoFlush = $true
}
}
catch {
Write-Host "$($h.ID) Connection Failed $_" #Write-Debug $_
}
finally {
return
}
}
即使重新连接也不会因双重输入而失败。