Noo tak dam system("telnet xxx xx"); a ten po me chce jakesi dalsi prikazy (HELO, DATA atd.)... a ja se ptam, jak je tam dostat aniz bych musel smatnout na klavesnici.. tedy vyzkousel jsem nekolik vystupnich funkci, ale vzdy pockali az kdyz uzavru telnet a potom teprve zacali psat.. Jeste by me zajimalo, kdyz zavolam nejaky prikaz pomoci system, jak ulozit vypis/ vysledek, proste to co ten prikaz vytiskne na obrazvku, a nacpat to do nejake promene??
Fórum › C / C++
I/o
fajn nejak se pokusim... a ten telnet, plssssssssssssssss :'-(
chystam se... ale pro zacatek mi pripada jednodussi tohle. I kdybych ale presedlal na sockety, tohle by me dost zajimalo :-)
To Zelenáč: Nema telnet nahodou nejake parametry, kterymi by mu ty data sly predat? Ptam se, nechce se mi to ted hledat ani zkouset. A co se tyce toho druheho, tak jeste muzes, k tem vsem moznostem, ktere tu padly, pouzit rouru(pipe).Nevyhoda je stejna jako u vsech moznosti - ani jedna neni prenositelna.
Bohuzel.. nema; stejne jako treba u ftp...
Nevim, jak je to u jinych OS, ale pres telnet to bude fungovat na Windows a GNU/Linux.. Takze snad i proto se mi libi tato varianta (kdyz uz ne kvuli jednoduchosti - i kdyz, kdyby to bylo tak jednoduche, tak bych se tu na to neptal :-)
No mne pripada omnoho jednoduchsie to realizovat cez sockety. Stacilo ked som vydel ako maju Windows realizovane pipes.Skus pozriet na nasledujuci link, tam sa o tom docitas viac:
http://msdn2.microsoft.com/en-us/library/aa365139.aspx
fuj.. microsrot... To nikdo nevi jak vyresit telnet, ze me vsichni odkazujete na sockety, roury a ja nevim co jeste???
tak dobre, zkusim to jeste jednou:
otevru si terminal a zadam napr. "telnet gmail.com 25" (tedy zadato za me system(), ale to je ted jedno..)
"Trying 64.233..."
"Connected..."
"220 mail..."
ted potrebuju napsat "HELO gmail.com" ! Tedy aby to za mne napsal muj programek...
chapete??? rekneme ze mi nezalezi (prozatim) na tom, aby to bylo multiplatformni - musi to fungovat na Tucnacich...
a nechci zadne sockety, chci jedine tohle!! :-)
Problem nieje ten ze nikto nevie ako sa to da vyriesit bez rur a socketov.Problem je ten ze sa to neda vyriesit bez pouzitia rur alebo socketov(smolu mas ze Windows ma rury tak komplikovane). A uz vobec nie v C/C++.To co potrebujes je vzajomna komunikacia medzi procesmi.Tato problematika obsahuje viacero technik ako rury, sockety, zdielana pamet ale ziadna z tychto technik nieje az tak jednoducha ze ju vyriesis jednym prikazom ako ty chces.
Fakt neviem co moze byt jednoduchsie ako otvorit si nejaky file descriptor a do neho zapisovat a citat.
Toto je sposob pre Windows a sockety(nakolko vo Windows pouzivat pipes je pre mna akosi divoke)
#include <windows.h>
#define BUFSIZE 1000
int socket_init()
{
WORD wVersionRequested = MAKEWORD(1,1);
WSADATA data;
if (WSAStartup(wVersionRequested, &data) != 0)
{
printf("ERROR: cannot initialize sockets\n");
return -1;
}
return 0;
}
int socket_connect(const char* ip_address, int port)
{
hostent *host;
int socket_descr;
sockaddr_in serverSock;
int res;
host = gethostbyname(argv[1]);
if (!host) {
printf("ERROR:bad host address\n");
return -1;
}
socket_descr = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (socket_descr < 0) {
printf("ERROR:cannot create socket\n");
return -1;
}
serverSock.sin_family = AF_INET;
serverSock.sin_port = htons(port);
memcpy(&(serverSock.sin_addr), host->h_addr, host->h_length);
res = connect(socket_descr, (sockaddr *)&serverSock, sizeof(serverSock));
if (res < 0) {
printf("ERROR:cannot connect to server\n");
return -1;
}
return socket_descr;
}
int main()
{
int sock;
const char buffer[BUFSIZE];
int buf_size;
socket_init();
sock = socket_connect("gmail.com", 25);
if (sock >= 0) {
//nacitam co poslal server
buf_size = recv(sock, buffer, BUFSIZE, 0);
if (buf_size > 0) {
printf("prijate:%s", buffer);
}
//poslem serveru nieco
send(sock, "HELO gmail.com", sizeof(char) * 14, 0);
closesocket(mySocket);
}
WSACleanup();
return 0;
}
Dalsia vec je ze az doteraz si sa nezmienil o tom ze to chces pre Linux.Ja som si to vsimol az teraz..Otvoris si ruru(popen()), zapises(fwrite()), precitas(fread()), uzavries ruru(pclose()).
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define BUFSIZE 1000
int main()
{
FILE* telnet;
char buffer[BUFSIZE];
int buf_size;
telnet = popen("telnet neviem kam","w");
if (telnet) {
//zapisem na telnet nieco
sprintf(buffer, "text ktory poslem\n");
fwrite(buffer, sizeof(char), strlen(buffer), telnet);
pclose(telnet);
}
return 0;
}
Ukazky su principialne.Nekompiloval som ich ani som ich neskusal.Su len ilustracne.Este doporucujem pozriet problematiku rur, parent a child procesov, funkcie ako dup(), fork(), pipe(), execl() atd..
Super !!! :-) Konecne mi to nekdo vysvetlil.. Moc, moc, moc dik ;-)
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
[C#] Počítání velikosti objektu — založil sh00ter
Margin-top pri viac obrázkoch v rovnakom dive — založil Jozef
Soutěž s bohatým finančním ohodnocením — založil lfa
Obrázok v strede — založil Peter
VS2010, OnceClick a Sql server Compact — založil VladislavK
Moderátoři diskuze