Client/Client chat
Client/Client chat
Hej!
Om man tar Teamviewer så kontaktar man en server för att hitta klienten/datorn, men kommunikationen tror jag går bara mellan klienterna och servern är bara inblandad i uppstarten.
Är det någon som har ett tips på hur man gör ett chat program i C# mellan klienter som fungerar på samma sätt.
När jag googlar så hittar jag inget, så någon som har tips på vad man söker på.
Trevlig kväll!
Om man tar Teamviewer så kontaktar man en server för att hitta klienten/datorn, men kommunikationen tror jag går bara mellan klienterna och servern är bara inblandad i uppstarten.
Är det någon som har ett tips på hur man gör ett chat program i C# mellan klienter som fungerar på samma sätt.
När jag googlar så hittar jag inget, så någon som har tips på vad man söker på.
Trevlig kväll!
- lillahuset
- Gått bort
- Inlägg: 13969
- Blev medlem: 3 juli 2008, 08:13:14
- Ort: Norrköping
Re: Client/Client chat
Vad får dig att tro att servern bara är inblandad i uppstarten? Om jag minns rätt laddar båda parter hem klienter de vet väldigt lite om.
http://alternativeto.net/software/teamv ... cense=free
https://www.quora.com/What-is-the-best- ... er?share=1
Att de är open source är ingen garanti att de inte snokar men risken är nog mindre.
http://alternativeto.net/software/teamv ... cense=free
https://www.quora.com/What-is-the-best- ... er?share=1
Att de är open source är ingen garanti att de inte snokar men risken är nog mindre.
Re: Client/Client chat
Teamviewer fungerar som så att båda klienter ansluter till Teamviewer-servern, berättar sina ID-nummer, vilken IP de har och vilken port de vill att andra klienter ansluter till, sen håller de antagligen anslutningen vilande sålänge datorn är igång för att TS-servern enkelt ska kunna berätta när en ny klientanslutning är påväg, TS-servern antecknar deras externa IP-nummer utifall att de sitter bakom NAT.
När en klienten vill ansluta till en annan frågar den TS-servern om IP-adress och port de ska ansluta till. TS-servern svarar och skickar också ut ett meddelande till motparts-klienten att någon vill ansluta från IP:port. Sen utför klienterna lite magi med http://stackoverflow.com/questions/8819118/tcp-hole-punching och antagligen också UDP för snabbare överföring av bild och ljud.
TCP Hole Punching behövs för att ta sig igenom NAT i hemmaroutrar.
När en klienten vill ansluta till en annan frågar den TS-servern om IP-adress och port de ska ansluta till. TS-servern svarar och skickar också ut ett meddelande till motparts-klienten att någon vill ansluta från IP:port. Sen utför klienterna lite magi med http://stackoverflow.com/questions/8819118/tcp-hole-punching och antagligen också UDP för snabbare överföring av bild och ljud.
TCP Hole Punching behövs för att ta sig igenom NAT i hemmaroutrar.
Re: Client/Client chat
Lättast är nog att googla "chat c# tcp". Finns några exempel som använder system.net.sockets. Sen får man baka ihop klient och server i samma app. Server-delen används när du tar emot "samtal".
Edit: kom ett svar medan jag skrev, men jag tror mitt är relevant också.
Edit: kom ett svar medan jag skrev, men jag tror mitt är relevant också.
Re: Client/Client chat
Tack för alla bra svar!
Nu är jag på rätt spår. p2p chat är det som jag söker.
http://www.codeproject.com/Articles/212 ... ed-via-P-P
Nu är jag på rätt spår. p2p chat är det som jag söker.
http://www.codeproject.com/Articles/212 ... ed-via-P-P
Re: Client/Client chat
TeamViewer är inte peer2peer somsagt. Allt går vi servas servers för att kunna fungera över NAT.
Re: Client/Client chat
Nja, behöver ju inte gå över server för själva chattrafiken, googla på "nat holepunching"
/johan
/johan
Re: Client/Client chat
Det är ju inte alltid som "holepunching" fungerar.
Om routern inte har uPnP eller liknande så kan en klient på insidan inte öppna en port som lyssnar på trafik från vilken IP-adress som helst. NAT-mappningen tar ju nästan alltid hänsyn till både portnummer och IP-adress för den externa parten.
Inkommande trafik från "fel" IP-adress och port kommer att droppas eftersom den inte går att matcha mot nåt befintligt koppel.
Då måste man ha fallback till att gå via servern (den kommer ju då dock bara att skyffla trafik mellan två klienter).
Om routern inte har uPnP eller liknande så kan en klient på insidan inte öppna en port som lyssnar på trafik från vilken IP-adress som helst. NAT-mappningen tar ju nästan alltid hänsyn till både portnummer och IP-adress för den externa parten.
Inkommande trafik från "fel" IP-adress och port kommer att droppas eftersom den inte går att matcha mot nåt befintligt koppel.
Då måste man ha fallback till att gå via servern (den kommer ju då dock bara att skyffla trafik mellan två klienter).