运维开发网
广告位招商联系QQ:123077622
 
广告位招商联系QQ:123077622

套接字 – 只能通过TCP接收或发送

运维开发网 https://www.qedev.com 2020-07-11 10:27 出处:网络 作者:运维开发网整理
我在编写可以通过TCP连接发送和接收数据的Power Shell脚本时遇到问题.它似乎只让我做一个或另一个. 以下是我到目前为止的情况.我想监听并等待连接,然后一旦建立,接收包含IP地址的字符串,做一些奇特的查找以查看用户登录到该计算机,然后发回用户名.如果我只发送数据,它可以工作.如果我只收到数据,它就有效.如果我尝试两者都做,只有接收工作.我究竟做错了什么? $port = 1234 do
我在编写可以通过TCP连接发送和接收数据的Power Shell脚本时遇到问题.它似乎只让我做一个或另一个.

以下是我到目前为止的情况.我想监听并等待连接,然后一旦建立,接收包含IP地址的字符串,做一些奇特的查找以查看用户登录到该计算机,然后发回用户名.如果我只发送数据,它可以工作.如果我只收到数据,它就有效.如果我尝试两者都做,只有接收工作.我究竟做错了什么?

$port = 1234

do {
  $user = ""

  $endpoint = new-object System.Net.IPEndPoint ([system.net.ipaddress]::any, $port)
  $listener = new-object System.Net.Sockets.TcpListener $endpoint
  $listener.start()

  $client = $listener.AcceptTcpClient() # will block here until connection
  $stream = $client.GetStream();

  $reader = New-Object System.IO.StreamReader $stream
  $writer = New-Object System.IO.StreamWriter $stream

  $add = $reader.ReadLine()
  #$reader.close()

  write-host "Request from " $add

  if($add) {
    $user = & wmic /Node:$add ComputerSystem Get UserName
    write-host "User returned is " $user[2]
  }

  if($user[2] -eq "ERROR:") {
    $user[2] = "ErrNoUserW"
  } elseif(!$user[2]) {
    $user[2] = "ErrServerW"
  }

  $writer.Write($user[2])

  #$writer.close()
  $stream.close()
  $client.close()
  $listener.stop()
} while(1)
我认为只能在任何给定时间读取或写入流.您是否尝试关闭流然后重新打开它?

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消