почему $socket.Available не работает а $stream.DataAvailable работает?
Пишу проект на powershell & python, возникла проблема.
Ранее использовал stream и tcpClient при работе, но теперь использую socket по техническим проблемам. Ранее при работе использовал $stream.DataAvailable для проверки есть ли данные в буфере. Однако сейчас я попробовал провернуть то же с сокетом: $socket.Available -gt 0, но условие всегда ложно.
на серверной части всё верно, ведь когда был stream всё работало исправно. Есть ли догадки? вот полный код на данный момент с сокетом:
$server_port = 1336;
$server_ip = '127.0.0.1';
$socket = New-Object System.Net.Sockets.Socket(
[System.Net.Sockets.AddressFamily]::InterNetwork,
[System.Net.Sockets.SocketType]::Stream,
[System.Net.Sockets.ProtocolType]::Tcp
);
while ($socket.Available -gt 0) {
Write("Packet Received");
$packet_length = New-Object byte[] 1;
$len = $socket.Receive($packet_length);
$packet = New-Object byte[] $packet_length[0];
$len = $socket.Receive($packet);
}
Вот код с $stream.DataAvailable:
$port = 1336;
$server_ip = '127.0.0.1';
$ip = [System.Net.Dns]::GetHostAddresses($server_ip) | Where-Object
{$PSItem.AddressFamily -eq 'InterNetwork'};
$socket = New-Object System.Net.Sockets.TCPClient($ip, $port);
$stream = $socket.GetStream();
while ($stream.DataAvailable) {
Write("Packet Received");
$packet_length = New-Object byte[] 1;
$len = $stream.Read($packet_length, 0, $packet_length.Length);
$packet = New-Object byte[] $packet_length[0];
$len = $stream.Read($packet, 0, $packet.Length);
}