Форум сайта python.su
Всем привет, не знаю каким образом переписать, может поможете
код на шарпе, клиентская часть
EndPoint packetSender = (EndPoint) new IPEndPoint(IPAddress.Any, 0);
byte[] buf = new byte[2048];
while ( state != State.Disconnected )
{
try
{
if ( !sock.Poll(150000, SelectMode.SelectRead) && DateTime.Now > timeOut )
{
DebugLog.WriteLine("UdpConnection", "Connection timed out");
state = State.Disconnected;
break;
}
while ( sock.Poll(10000, SelectMode.SelectRead) )
{
int length = sock.ReceiveFrom(buf, ref packetSender);
if ( !packetSender.Equals(remoteEndPoint) )
continue;
timeOut = DateTime.Now.AddSeconds(TIMEOUT_DELAY);
MemoryStream ms = new MemoryStream(buf, 0, length);
UdpPacket packet = new UdpPacket(ms);
ReceivePacket(packet);
}
}
catch ( SocketException e )
{
DebugLog.WriteLine("UdpConnection", "Critical socket failure: " + e.ErrorCode);
state = State.Disconnected;
break;
}
if ( state != State.Disconnected )
SendPendingMessages();
if ( inSeq != inSeqAcked )
SendAck();
if ( state == EState.Disconnecting && outPackets.Count == 0 )
{
DebugLog.WriteLine("UdpConnection", "Graceful disconnect completed");
state = State.Disconnected;
}
}
DebugLog.WriteLine("UdpConnection", "Calling OnDisconnected");
OnDisconnected(EventArgs.Empty);
select.select([sock], [], [], x)[0]
sock.Poll(x, SelectMode.SelectRead)
Отредактировано rubitwa (Март 28, 2015 20:52:59)
Офлайн
Офлайн
ага, проверить полностью скрипт ещё пока не могу, но на тесте select.select() сработало как надо))
Отредактировано rubitwa (Март 28, 2015 23:09:37)
Офлайн