Zdravim ...
Snazim se naucit spojeni mezi serverem a clientem (TCP/IP) ale mam tu takovy problem ...
jeste nikdy sem nedelal server ani clienta a vubec nevim jak by to melo vypada (Strukutra apod.)
Jde mi hlavne o ten server neboli client je prej lehkej ... Nemohli by jste me nejak poradit co bych v tom serveru mel mit presne aby se me to spojilo apodobny veci ? Struktura, co tam vsechno musi bejt aby to mohlo fungovat ? Dekuji moc
Fórum › .NET
[C#] Server
Tiez som to nedavno skusal, treba googlit... Zalezi na tom na co to presne chces, ci chces synchronny alebo asynchronny server atd...
napr. som skusal toto http://csharp.net-informations.com/communications/csharp-server-socket.htm
a tu som ti uploadol co som podla toho navodu "vytvoril" http://larry.yweb.sk/Projects.zip
Larry napsal:
Tiez som to nedavno skusal, treba googlit... Zalezi na tom na co to presne chces, ci chces synchronny alebo asynchronny server atd...
napr. som skusal toto http://csharp.net-informations.com/communications/csharp-server-socket.htm
a tu som ti uploadol co som podla toho navodu "vytvoril" http://larry.yweb.sk/Projects.zip
Jj dik to je ono jen bych potreboval aby to odesilalo na server informace a pak v clientoj je zobrazilo ... Jinak nechci nejak zpochybnovat tvoji praci ale mas tam par chyb ... treba mas while a pod while mas kod ke kterymu ani nemuze nikdy dojit ....
Edit : Jeste jedna otazka ... Jak muzu porpojit Form a Server v konzoli ? jako ze bych vyplnil IP a port spustil server a ono by se to spustilo s tou IP a portem ?
tak sem zistil ze muzu zpustit pres Application.Run(new Server()); ale rpoblem je v tom ze mi to ten server nevezme z duvodu to prave nevim :-D ... je to consolova app ale kdyz vytvarim new file inside project tak tam nemam navyber nic consolovyho :-X
Je mozne a pravdepodobne ze su tam chyby :), vacsinu som opisal podla toho navodu a potom som mozno nieco skusal a nechal som to tam nedokoncene... nepamatam sa uz... no a ak chces robit nieco komplexnejsie tak by si sa mal naucit najskor zakladnejsie veci a nie hned sa pustat do veci ktorym nerozumies, treba aj pochopit ako to funguje :)
Larry napsal:
Je mozne a pravdepodobne ze su tam chyby :), vacsinu som opisal podla toho navodu a potom som mozno nieco skusal a nechal som to tam nedokoncene... nepamatam sa uz... no a ak chces robit nieco komplexnejsie tak by si sa mal naucit najskor zakladnejsie veci a nie hned sa pustat do veci ktorym nerozumies, treba aj pochopit ako to funguje :)
Tak jako ne tady jde jenom o to jak spusim console app pres form praveze pres application.Run to nefaka a nevim proc ale nomrlane to funguje ... Jde mi o to aby sem to nemel rozprcany vsehcno ale mel v 1 programu ...
Larry napsal:
Nechapem, to chces mat server aj klientsku aplikaciu v jednom programe? :)
Tak tak ... Mel bych tam bud spustit server nebo pripojit k serveru ... Pri spusteni serveru by vyjela console zo serverem a s udajema co bych zadal do textboxu...(IP,Port)
:) Tak to nebude jeden ale uz tri programy, prece. To tvoje "Mel bych tam bud spustit server nebo pripojit k serveru" by bylo jeste jako nejaky switch menu. A proste nemuzes spojovat klienta se serverem.
To midin : Proč ne? Klient může být zároveň server.
To Mutagen : Na takovou otázku obvykle odpovím "tak, jak jsem to napsal". Zkus to upřesnit.
djanosik napsal:
To Mutagen : Na takovou otázku obvykle odpovím "tak, jak jsem to napsal". Zkus to upřesnit.
No tak nemyslel jsem to jako ze to chci napsat ale docela dobre to vyznelo Ja bych potreboval neco jako Clienta v kterym je zabudovanej server a mohl bych ho treba u sebe spustit s moji IP a nekdo se pres stejnyho clienta pripoji k mymu serveru a at muzem treba posilat zpravy nebo tak neco ... Nebo obracene nekdo by spusil server se svou IP a ja se k nemu mihl pripojit ...
No ono ti nic nebrani mat u seba pusteny server - ako zvlast aplikaciu, aj klienta - ako dalsiu aplikaciu... A s tym aby sa na tvoj server u teba napajal niekto zvonku pridu asi dalsie problemy - firewall-y, port forwarding, ci mas verejnu IP atd... ale to si hol musis nastudovat - treba googlit, tam najdes vsetko co potrebujes :)
Larry napsal:
No ono ti nic nebrani mat u seba pusteny server - ako zvlast aplikaciu, aj klienta - ako dalsiu aplikaciu... A s tym aby sa na tvoj server u teba napajal niekto zvonku pridu asi dalsie problemy - firewall-y, port forwarding, ci mas verejnu IP atd... ale to si hol musis nastudovat - treba googlit, tam najdes vsetko co potrebujes :)
Googluju co se da ... ale ono je hodne neprakticky upravovat server a client zvast a zvlast to pokazdy kompilovat
Tak nejlépe to rozlišíš přes parametry příkazové řádky, tj. něco jako:
if ((args.Length != 1) || (args[0].CompareTo("/server") != 0))
{
// zobrazeni formu klienta
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
else
{
// kod pro server
Console.WriteLine("Server ....");
}
Pokud aplikaci spustíš xy.exe, tak se spustí klient. Pokud ji spustíš s parametrem (xy.exe /server), tak spustí server.
Dalším problémem ovšem je, že sis vybral zvláštní kombinaci konzole nebo form. Aplikace může být typu konzole nebo typu WF. Takže standardně budeš mít buď vždy zobrazenou konzoli, ať spustíš to nebo ono (typ aplikace konzole) nebo konzole nikdy vidět nebude (typ aplikace WF). Můžeš to vyřešit třeba tak, že do té první varianty přidáš uzavření konzole. Ještě si rozmysli, jestli se chceš touto cestou vydat :smile1: .
liborb napsal:
Tak nejlépe to rozlišíš přes parametry příkazové řádky, tj. něco jako:
if ((args.Length != 1) || (args[0].CompareTo("/server") != 0))
{
// zobrazeni formu klienta
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
else
{
// kod pro server
Console.WriteLine("Server ....");
}
Pokud aplikaci spustíš xy.exe, tak se spustí klient. Pokud ji spustíš s parametrem (xy.exe /server), tak spustí server.
Dalším problémem ovšem je, že sis vybral zvláštní kombinaci konzole nebo form. Aplikace může být typu konzole nebo typu WF. Takže standardně budeš mít buď vždy zobrazenou konzoli, ať spustíš to nebo ono (typ aplikace konzole) nebo konzole nikdy vidět nebude (typ aplikace WF). Můžeš to vyřešit třeba tak, že do té první varianty přidáš uzavření konzole. Ještě si rozmysli, jestli se chceš touto cestou vydat :smile1: .
No jak to tak posloucham Tak to asi bude jednodusi udelat zvlast ... Asi udelam to ze si to dam do slozky a budu spustet clienta a pres kod se mi pusti 2 soubor server vypada to asi na nejjednodusi reseni ... ale nevim jestli bude zase fungovat to ze kdyz si tam dam do form vyplnim ip a port aby se to preneslo do serveru ...
To liborb : Obecně vzato může být oboje WF aplikace. Myslím, že v tomto případě to nebude žádnej problém.
To Mutagen : Jakou že to děláš aplikaci?
djanosik napsal:
To liborb : Obecně vzato může být oboje WF aplikace. Myslím, že v tomto případě to nebude žádnej problém.
To Mutagen : Jakou že to děláš aplikaci?
Nakej Chat ... no kdyby server mohl bejt pres form tak bych v tom rpoblem nevidel ale jaksi nevim jak udelat server ve formu :-)))
To Mutagen : Stejně jako v konzoli :) Jen bude jiný UI.
Zdravim ... Tak sem konečne něco spachal ale porad mi to hazi error :-(
(Metoda musí mít typ vrácené hodnoty) a porad nevim jak to opravit... Jde o tento rádek public Start_ServerOkno()
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Text;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Threading;
using System.Collections;
using System.Data;
namespace Chat_server
{
/// <summary>
/// Description of Server.
/// </summary>
public partial class ServerOkno : Form
{
public ServerOkno()
{
//
// The InitializeComponent() call is required for Windows Forms designer support.
//
InitializeComponent();
//
// TODO: Add constructor code after the InitializeComponent() call.
//
}
public Start_ServerOkno()
{
spojeni = new TcpListener(IPAddress.Parse("127.0.0.1"), 5050); //Spojeni na LocalHost s portem 5050
Socket socket; // zacina se naslouchat na dane IP adrese a portu spojeni.Start();
spojeni.Start();
while(true)
{
socket = spojeni.AcceptSocket();
if(socket.Connected)
{
//Console.WriteLine(" >> Client Connected");
// vytvoreni bufferu pro ziskana data
Byte[] received = new Byte[1024];
// prijimani dat - pozadavku
int i = socket.Receive(received, received.Length, 0);
// prevod bytu na retezec
string request = Encoding.ASCII.GetString(received);
// vytvoreni bufferu pro naplneni daty k odeslani
Byte[] Data2Send = new Byte[1024];
// .... zpracovani prichoziho pozadavku ....
// .... ziskani souboru k odeslani ....
// odeslani dat klientu
socket.Send(Data2Send, Data2Send.Length, 0);
}
}
}
}
}
liborb napsal:
public void Start_......
Bohuzel :-X
http://koukej.707.cz/obrazky/void.jpg
a bohuzel kdyz tomu dam int, char, string, byte tak nic nepomaha
To Mutagen : Ten void je v dané situaci správně. Problém je s proměnnou spojeni, která není nikde definovaná (stačí číst ty chybový hlášky a určitě to poznáš sám). Doporučoval bych nejprve projít alespoň minimum teoretických základů, než se pustíš do praktických věcí.
Jo ale ja vim ze tam neni definovana ale jak si asi mam definovat kdyz mi to nevezme string a nic ostatniho ?djanosik napsal:
To Mutagen : Ten void je v dané situaci správně. Problém je s proměnnou spojeni, která není nikde definovaná (stačí číst ty chybový hlášky a určitě to poznáš sám). Doporučoval bych nejprve projít alespoň minimum teoretických základů, než se pustíš do praktických věcí.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Windows server v Linux server — založil Franceq
Emailový server — založil mad_nightmare
SQL server — založil Pebble
Anonymni server — založil Figa
Moderátoři diskuze