Wysyłanie danych serwer - klienci

0

Więc przerobiłem program na wysyłanie co bodajże 20 milisekund wysyłania i działa to znakomicie. Po pierwszych próbach prędkość jest bardzo dobra, a jak jeszcze trochę pokombinuje to może będzie lepiej. Ale teraz jest inny problem. Użytkownicy nie widzą się w sieci internet. Przez LAN wszystko działa jak trzeba, natomiast przez neta jest lipa. Port 12345 z którego działa aplikacja jest poprawnie przekierowany i odblokowany ponieważ mogę na nim "Real VNC" odpalić. Wiem też, że na jednym porcie nie mogą działać dwa programy, także VNC wyinstalowałem. Wiecie w czym rzecz?

EDIT:
OK jakoś się udało przebić przez net. Jak będę miał jeszcze jakieś problemy to będę pisać. Bardzo dziękuje wszystkim za skuteczną pomoc.

Pozdrawiam

0

Soory, że post pod postem, ale jednak ten algorytm nie działa tak jak trzeba. Wiem, że może to trochę dziwnie zabrzmi, ale potrzebuje innego algorytmu. Jak by ktoś znał jakąś szybszą metodę na wysłanie danych to proszę o pomoc.

0

LOL spróbuj na sieci 1Gb

0

Czyli, że mam spróbować połączyć dwa kompy przez karty sieciowe, czy się ze mnie nabijasz teraz?

Tak mniej więcej potrzebuje wymiany danych po między kompami w interwale 80 milisekund (czyli taki pingi bez problemu da się osiągnąć w grach FPS)

Kod który dostałem od Misikieda przerobiłem tak, że w Timerze wysyła tylko co 80 milisekund.

Moje wypociny zamieszczam tutaj (kod źródłowy razem ze exe):
http://speedy.sh/WuX2f/Simple-MultiChat-przerobione.zip

Co robię nie tak?

0

Co do Twojego pytania w komentarzu, to na pewno tak jest pod VCL, a dla WinAPI co sobie za problem sprawdzić. Mi wychodzi 94 ms, o ile taki kod jest wiarygodny. Timery generalnie do bardzo małych odstępów czasowych się średnio nadają. Lepiej używać wątków, ale trzeba wiedzieć co się robi. Jeżeli się mylę to niech bardziej doświadczeni w pisaniu klientów ślących danych na serwery się wypowiedzą, ja pisałem tylko raczej programy pobierające protokołem HTTP lub FTP, z innymi nie miałem za bardzo do czynienia.

Kopiuj
var
  Start, Stop : Cardinal;

procedure Kill;
begin
  KillTimer(Form1.Handle, 1);
  Form1.Caption := IntToStr(Stop - Start);
end;

procedure Proc;
begin
  Stop := GetTickCount;
  Kill;
end;

procedure TForm1.FormCreate(Sender : TObject);
begin
  Start := GetTickCount;
  SeTTimer(Handle, 1, 80, @Proc);
end;
0

OK więc udało mi się rozwiązać problem, tym razem już ostatecznie.
Odpowiedź na moje pytanie brzmi:
TCP no delay.

@oho
Jak sam sobie udowodniłem nie miałem jakiś nie wiadomo jakich wyobrażeń o prędkości. :)
A tak na marginesie to Couter Strike do rozgrywki używa UDP a nie TCP.

Tyle w temacie. Dziękuje wszystkim za pomoc.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.