Ang*_*-Br 5 sockets powershell networking dart flutter
我希望能够让 2 个 flutter 客户端使用 Dart:io 中的 RawDatagramSocket 通过 UDP 套接字相互发送数据。两个客户端都知道对方的 IP 地址以及他们正在侦听和接收的端口
当将 UDP 数据包发送到与发送者位于同一 LAN 上的 flutter 客户端时,socket.listen() 方法不会接收 UDP 数据包。
当从 powershell 窗口或 flutter 客户端发送 UDP 数据包到 UDP powershell 侦听器时,数据包确实会被接收并可以读取。
问题:当共享相同的 IP 地址和侦听端口时,powershell 客户端如何接收数据包,但 flutter 客户端却收不到数据包?
当向在端口 1338 上侦听的客户端发送数据包时,侦听不会打印任何指示它未收到数据包的内容。
class ChatCubit extends Cubit<ChatState> {
ChatCubit() : super(ChatLoading());
String addressValue = 'IP OF THE TARGET MACHINE';
late RawDatagramSocket udpSocket;
Future main() async {
udpSocket = await RawDatagramSocket.bind(InternetAddress.anyIPv4, 1338);
udpSocket.broadcastEnabled = true;
print('############# Listening to Messages #############');
udpSocket.listen((event) {
print("recv e: $event");
if (event == RawSocketEvent.read) {
print(utf8.decode(udpSocket.receive()!.data));
}
}, onError: (error) {
print("error: $error");
}, onDone: () {
print("done!");
}, cancelOnError: true);
print('${udpSocket.address.address}:${udpSocket.port}');
}
void sendMessage(String basicMessage) async {
print('############# Sending Message #############');
udpSocket.send(const Utf8Codec().encode(basicMessage), InternetAddress(addressValue), 1337);
}
}
Run Code Online (Sandbox Code Playgroud)
使用此powershell脚本向flutter客户端发送UDP数据包会导致客户端收不到任何东西
function Send-UdpDatagram
{
Param ([string] $EndPoint,
[int] $Port,
[string] $Message)
$IP = [System.Net.Dns]::GetHostAddresses($EndPoint)
$Address = [System.Net.IPAddress]::Parse($IP)
$EndPoints = New-Object System.Net.IPEndPoint($Address, $Port)
$Socket = New-Object System.Net.Sockets.UDPClient
$EncodedText = [Text.Encoding]::ASCII.GetBytes($Message)
$SendMessage = $Socket.Send($EncodedText, $EncodedText.Length, $EndPoints)
$Socket.Close()
}
Run Code Online (Sandbox Code Playgroud)
powershell命令:Send-UdpDatagram -EndPoint“目标机器的IP”-端口1338-消息“test.mymetric:0 | c”
使用此 powershell 脚本侦听将到达端口 1338 的 UDP 数据包,它使用使用相同代码但使用 sendMessage 到端口 1338 并侦听 1337 的不同 flutter 客户端成功接收数据包。或者发送者 powershell 脚本。
param( $address="Any", $port=1338)
try{
$endpoint = new-object System.Net.IPEndPoint( [IPAddress]::$address, $port )
$udpclient = new-object System.Net.Sockets.UdpClient $port
}
catch{
throw $_
exit -1
}
Write-Host "Press ESC to stop the udp server ..." -fore yellow
Write-Host ""
while( $true )
{
if( $host.ui.RawUi.KeyAvailable )
{
$key = $host.ui.RawUI.ReadKey( "NoEcho,IncludeKeyUp,IncludeKeyDown" )
if( $key.VirtualKeyCode -eq 27 )
{ break }
}
if( $udpclient.Available )
{
$content = $udpclient.Receive( [ref]$endpoint )
Write-Host "$($endpoint.Address.IPAddressToString):$($endpoint.Port) $([Text.Encoding]::ASCII.GetString($content))"
}
}
$udpclient.Close( )
Run Code Online (Sandbox Code Playgroud)
从 flutter 客户端或 powershell 窗口发送到 powershell 窗口监听器如何工作?但是向 flutter 客户端发送 UDP 数据包并尝试监听它,它只是不想接收它。
| 归档时间: |
|
| 查看次数: |
774 次 |
| 最近记录: |