Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 只能通过TCP接收或发送_Sockets_Powershell_Tcp - Fatal编程技术网

Sockets 只能通过TCP接收或发送

Sockets 只能通过TCP接收或发送,sockets,powershell,tcp,Sockets,Powershell,Tcp,我在编写能够通过TCP连接发送和接收数据的PowerShell脚本时遇到问题。它似乎只让我做一个或另一个 以下是我到目前为止的情况。我想监听并等待一个连接,然后一旦建立,接收一个包含IP地址的字符串,进行一些奇特的查找以查看哪个用户登录到该机器,然后发送回用户名。如果我只发送数据,它就会工作。如果我只接收数据,它就会工作。如果我同时尝试这两种方法,只有receive有效。我做错了什么 $port = 1234 do { $user = "" $endpoint = new-objec

我在编写能够通过TCP连接发送和接收数据的PowerShell脚本时遇到问题。它似乎只让我做一个或另一个

以下是我到目前为止的情况。我想监听并等待一个连接,然后一旦建立,接收一个包含IP地址的字符串,进行一些奇特的查找以查看哪个用户登录到该机器,然后发送回用户名。如果我只发送数据,它就会工作。如果我只接收数据,它就会工作。如果我同时尝试这两种方法,只有receive有效。我做错了什么

$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)

我认为流只能在任何给定的时间读取或写入。您是否尝试过关闭流然后重新打开它?

是否可以将客户端脚本发布到?现在我正在使用Ncat(来自Nmap套件)进行测试。因此,如果您输入“/path/to/ncat ip\u address port\u number”,那么只需输入一个ip并按enter键,它就会用用户名响应(或者,无论如何,这是个想法。客户端从未看到响应)。尝试
$writer.Flush()
。太棒了!非常感谢。就这样!请注意,不要在PowerShell脚本中使用
wmic
。改为使用
Get WmiObject
$user=(Get WmiObject-Computer$add-Class Win32\u ComputerSystem)。用户名