Dakujem
C# listening
C# listening
Ahojte
mam na vas taku otazku ci by ste mi nevedeli prosim vas pomoct s jednym kodom... ide o to ze mam program, ktory cez ping posiela nejake pakety na urcitu IP adresu na urcity Port.... a ja by som potreboval program, ktory by pocuval vsetky prichadzajuce pakety z toho daneho portu a ich niekam vypisoval napriklad do richtextbox... vsetko viem spravit len mam problemy s tym scriptom co bude "pocuvat"
Dakujem
Dakujem
Re: C# listening
Aké protokoly používaš?
Ak myslíš ping ako ICMP echo, tak porty rovnako ako pripojenie neexistujú. Budeš potrebovať socket s ProtocolType.Icmp a SocketType.Raw, pričom v Echo Reply potrebuješ sám vytvoriť IP header. Ten nebude automaticky pridaný kvôli parametru ST.Raw.
Ak myslíš ping ako ICMP echo, tak porty rovnako ako pripojenie neexistujú. Budeš potrebovať socket s ProtocolType.Icmp a SocketType.Raw, pričom v Echo Reply potrebuješ sám vytvoriť IP header. Ten nebude automaticky pridaný kvôli parametru ST.Raw.
Re: C# listening
no ja by som chcel urobit nieco ako keby "chat" a spravy by sa posielali cez port, rozmyslal som nad pingom, lebo vlastne ping je poslanie nejakych paketov (defaultne 32 bytov) tak som rozmyslal ze by som do tych paketov dal spravu, a druhy program by ju odchytil
na bazi peer to peer... cize bez servera
na bazi peer to peer... cize bez servera
-
axxis
Addict
- Príspevky: 3690
- Registrovaný: 29 máj 2007, 21:53
- Bydlisko: Spálené mlyny
- Kontaktovať používateľa:
Re: C# listening
nechapem co chces robit s tym pingom (ten ja na nieco uplne ine ako posielanie textovych sprav), ale to co hladas je Sockettomsk napísal:no ja by som chcel urobit nieco ako keby "chat" a spravy by sa posielali cez port, rozmyslal som nad pingom, lebo vlastne ping je poslanie nejakych paketov (defaultne 32 bytov) tak som rozmyslal ze by som do tych paketov dal spravu, a druhy program by ju odchytil
na bazi peer to peer... cize bez servera
Re: C# listening
no tak upravujem temu
temou je teraz socket
dakujem za vysvetlenie, ten ping bol len taky experiment ze co keby som zabalil do toho paketu spravu
no tak ako odchytit soket a niekam ho zapisat? 
-
axxis
Addict
- Príspevky: 3690
- Registrovaný: 29 máj 2007, 21:53
- Bydlisko: Spálené mlyny
- Kontaktovať používateľa:
Re: C# listening
Co mas ban na google?tomsk napísal:no tak upravujem temutemou je teraz socket
dakujem za vysvetlenie, ten ping bol len taky experiment ze co keby som zabalil do toho paketu spravu
no tak ako odchytit soket a niekam ho zapisat?
Vsak napis do googlu .NET socket communication.
Socket je endpoint, ktory pocuva prichadzajuce data, nie je to packet ani ramec.
Re: C# listening
Na serveri:
U klienta:
Aj keď vytváraš P2P aplikáciu, stále potrebuješ niečo čo pripojenia prijíma a niečo čo sa pripája. Teda po zapnutí aplikácie môžeš vždy inicializovať prijímanie pripojení a dať užívateľovi aj možnosť pripojiť sa (čiže potebuješ osobitné thready).
Kód: Vybrať všetko
/* vytvor socket, ktorý bude zachytávať prichádzajúce TCP dáta s IP adresovaním */
Socket sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
/* nastav socket na prijímanie z:
- ľubovoľnej adresy
- na port 2789
*/
sck.Bind(new IPEndPoint(IPAddress.Any, 2789));
/* počúvaj */
sck.Listen(1);
/* počkaj a akceptuj prichádzajúce pripojenia */
Socket client;
while(true) {
client = sck.Accept();
/* komunikuj s klientom pomocou 'client' */
...
}
Kód: Vybrať všetko
Socket sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
/* pripoj sa na server */
sck.Connect(serverip, 2789);
/* komunikuj */
sck.Send(...);
Re: C# listening
tak ale myslim ze stacil by client-client, ze kazdy klient by mal funkciu aj na posielanie aj na pocuvanie, akurat ma zaujima ze ked klient nieco ziska tak ako zisti IP adresu kto to poslal? da sa to nejako zistit? alebo zahrniem IP adresu do spravy a potom si tu IP vytiahnem
Re: C# listening
tomsk napísal:tak ale myslim ze stacil by client-client, ze kazdy klient by mal funkciu aj na posielanie aj na pocuvanie
Aj keď vytváraš P2P aplikáciu, stále potrebuješ niečo čo pripojenia prijíma a niečo čo sa pripája. Teda po zapnutí aplikácie môžeš vždy inicializovať prijímanie pripojení a dať užívateľovi aj možnosť pripojiť sa (čiže potebuješ osobitné thready).
Socket.RemoteEndPointtomsk napísal: akurat ma zaujima ze ked klient nieco ziska tak ako zisti IP adresu kto to poslal? da sa to nejako zistit? alebo zahrniem IP adresu do spravy a potom si tu IP vytiahnem
-
harrison314
Hardcore addict
- Príspevky: 8219
- Registrovaný: 27 máj 2009, 20:42
- Bydlisko: Bratislava
- Kontaktovať používateľa:
Re: C# listening
Ono v C# ide vytvorit P2P aplikaciu aj tak aby si sa vobec nemusel starat o sokety
http://www.paulrohde.com/building-a-rea ... plication/
http://www.paulrohde.com/building-a-rea ... plication/
Re: C# listening
Taky problem naprogramovat program ktory by bol klient a server sucastne???Aj keď vytváraš P2P aplikáciu, stále potrebuješ niečo čo pripojenia prijíma a niečo čo sa pripája. Teda po zapnutí aplikácie môžeš vždy inicializovať prijímanie pripojení a dať užívateľovi aj možnosť pripojiť sa (čiže potebuješ osobitné thready).
harrison314 napísal:Ono v C# ide vytvorit P2P aplikaciu aj tak aby si sa vobec nemusel starat o sokety
http://www.paulrohde.com/building-a-rea ... plication/
skusim popozerat
Re: C# listening
... čím vyššie API použiješ, tým väčšie obmedzenia budeš musieť prekonávať. Sockety sú skoro jednotná univerzálna metóda IPC, pochopíš ich raz a budeš im rozumieť všade.harrison314 napísal:Ono v C# ide vytvorit P2P aplikaciu aj tak aby si sa vobec nemusel starat o sokety
http://www.paulrohde.com/building-a-rea ... plication/
Re: C# listening
Caute tak som som skusil nieco nakodit, mozete sa prosim vas pozriet na tento kod? akurat mi tu vypisuje 3 chyby a neviem ako to opravit, tieto chyby som zakomentoval "//chyba", inac prosim vas mozete sa este pozriet ci by tento system spravne aj fungoval? lebo niesom si isty ze by to takto malo byt v poriadku
ak som napisal blbost do toho kodu tak sa ospravedlnujem 
inak stastne a vesele vianoce!
inak stastne a vesele vianoce!
Kód: Vybrať všetko
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
byte[] bytes2 = new byte[1024];
Socket dostavac = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
dostavac.Bind(new IPEndPoint(IPAddress.Any, 2000));
dostavac.Listen(1);
Socket client;
while(true) {
client = dostavac.Accept();
bytes2 = new byte[1024];
int prijate = client.Receive(bytes2);
string prijate = Encoding.ASCII.GetString(bytes2, 0, prijate); //chyba
richTextBox1.AppendText(prijate); //chyba
System.Threading.Thread.Sleep(500);
}
}
private void button1_Click(object sender, EventArgs e)
{
byte[] bytes = new byte[1024];
Socket posielac = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
posielac.Connect("192.168.1.20:2000"); //chyba neviem preco
byte[] msg = Encoding.ASCII.GetBytes(textBox1.Text);
int poslane = posielac.Send(msg);
int dostane = posielac.Receive(bytes);
if (poslane != dostane) {
richTextBox1.AppendText("Spravu sa nepodarilo odoslat");
} else {
richTextBox1.AppendText(textBox1.Text);
}
posielac.Shutdown(SocketShutdown.Both);
posielac.Close();
}
}
}
Re: C# listening
Dvakrát používaš meno tej istej premennej v rovnakom kontexte. Stačí premenovať jednu z nich.int prijate = client.Receive(bytes2);
string prijate = Encoding.ASCII.GetString(bytes2, 0, prijate); //chyba
richTextBox1.AppendText(prijate); //chyba
Kód: Vybrať všetko
posielac.Connect("192.168.1.20:2000"); //chyba neviem preco
Kód: Vybrať všetko
posielac.Connect(IPAddress.Parse("192.168.1.20"), 2000);