MySQL - internet

0

Witam wszystkich.

Jestem początkującym programistą, więc mogłem opuścić coś ważnego, lub po prostu zrobić głupi błąd. W obu przypadkach proszę o wyrozumiałość. Napisałem mały program, który łączy się z bazą daną i wrzuca do niej dane. Wszystko gra gdy jako adres do połączenia dam mu 'localhost'. Jeżeli jednak wpiszę mu adres mojego ip zewn, lub jakiegokolwiek serwera mysql na cba, yoyo, czy inny,nie chce się łączyć. Nie mam pojęcia co jest tego przyczyną. Tak wygląda kawałek odpowiadający za łączenie:

if (
   !mysql_real_connect ( // nawiązuje połaczenie z bazą danych, w razie problemów zwraca błędy (false)
   conn, // wskażnik na obiekt
   "localhost", // nazwa hosta do ktorego chcemy się podłączyć 
   "root", // nazwa uzytkownika
   "pass", // haslo do bazy
   "test", // nazwa bazy do ktorej pragniemy nawiazac polaczenie
   0, // port (0 oznacza uzycie domyslnego)
   NULL, // socket (brak)
   0) // flagi (brak)
) {
     std :: cout << "Nie ma takiej bazy, lub podane dane są niepoprawne";
}

Przy tym się łączy. Jeżeli zmienię "localhost", wyświetla komunikat widoczny w kodzie.

Mam też drugi problem. Gdy odpalam ten programik za pomocą kompilatora, (Dev-C++, F9 = kompiluj + uruchom) normalnie się włącza. Gdy odpalam go za pomocą exeka, od razu wyskakuje "Program *.exe przestał działać." Jak temu zaradzić?

Z góry dziękuję,
Samik

0

Tu masz tutorial do tego:
http://www.conclase.net/c/mysql/index.php?cap=002
a moze Ci sie nie laczyc z wielu problemow, najlepiej jakbys wywolal mysql_error() i napisal co to za blad

0

Zreszta sam juz przeczytalem. Chodzi o to, ze musisz utworzyc socketa, aby uzyc tej funkcji do zdalnego laczenia z baza. Do utworzenia gniazda sluzyc funkcja socket, a zaleznie od systemu wymaga innych header'ow i lib'a.

0

Szukam, lecz niewiele się doszukuję. Mam go zastosować w przedostatnim argumencie? I jak powinna wyglądać funkcja definiująca socketa?

0
Samik napisał(a)

Szukam, lecz niewiele się doszukuję.

Czego szukasz ?

Samik napisał(a)

Mam go zastosować w przedostatnim argumencie?

Masz go zastosowac tam gdzie napisales, ze socket'a sie daje.

Samik napisał(a)

I jak powinna wyglądać funkcja definiująca socketa?

Piekna byc nie musi, ale chociaz zeby estetyczna byla i poprawna. Napisz jaki masz system, zeby pytan kolejnych uniknac jak to skompilowac.

0
  1. Szukałem wiadomości o socketach i tym jak je utworzyć
  2. Windows, Dev-C++.
0
Samik napisał(a)
  1. Szukałem wiadomości o socketach i tym jak je utworzyć

Szukajka na forum nie chce dzialac ?

Samik napisał(a)
  1. Windows, Dev-C++.
// gcc/g++ program.c/cpp -o program -lws2_32

#include <winsock2.h>
#include <windows.h>

int main(void)
{
   WSADATA wsaData;
   SOCKET sock;
   
   if(!WSAStartup(MAKEWORD(2,0), &wsaData))
   {
       // error
   }

   sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
   if(sock == INVALID_SOCKET)
   {
      // error
   }

   WSACleanup();

   return 0;
}
0

Podstawiłem 'socket' zamiast NULL, i wyskoczył mi błąd przy kompilacji - nie można zkonwertować SOCKET(int,int,int) na const char*, bo taki typ ma właśnie ten argument... Mój błąd?

0

po wala socket ??

z helpa mysql;owego

MYSQL *mysql_real_connect(
MYSQL *mysql,
const char *host,
const char *user,
const char *passwd,
const char *db,
unsigned int port,
const char *unix_socket,
unsigned long client_flag
)

co najwyzej mozna podac unix_socket czyli sciezke do gniazda mysqlowego w linuxie.
Tak domyslnie powinien pociagnac to co w host wpisane. A zwyklym mysqlowym klientem laczysz sie z tym hostem ?

0
Samik napisał(a)

Podstawiłem 'socket' zamiast NULL, i wyskoczył mi błąd przy kompilacji - nie można zkonwertować SOCKET(int,int,int) na const char*, bo taki typ ma właśnie ten argument... Mój błąd?

Moja wina, bo jednak nie jest potrzebny ten socket jak wynika z tamtego tutoriala.
Wrzuc po prostu jaki Ci blad wyswietla mysql_error(), bo nie widze bledu uzycia tej funkcji. Tutaj masz dokladny opis moze pomoze http://dev.mysql.com/doc/refman/5.0/en/mysql-real-connect.html

0

Patrzyłem już to. "Note that the host parameter determines the type of the connection. ", więc też myślałem, że powinien wziąć z hosta. A error: Cannot connect to MySQL server on 'xxx' <10060>

0

A jestes pewien, ze mozesz sie z tym hostem polaczyc ?

np. klient

mysql -uUZYTKOWNIK -p -hxxx.xxx.xxx.xxx

bo wynika, ze nie. Nie kazdy serwer udostepnia polaczenia na zewnatrz

0

Racja, mój błąd... Teraz próbuję się połączyć choćby do siebie, z zewnątrz i nic... A host użytkownika jest ustawiony na '%'...

0

Ok, poradziłem sobie... Ale jest drugi problem. Przy odpalaniu programu nie przez kompilator wywala błąd: "Aktualnie inny program korzysta z tego pliku." Czy jest to spowodowane tym, że pobieram dane z pamięci procesu? Jak temu zaradzić?

0

a czy cos zapisujesz robisz na jakims pliku ? Moze go nie zamykasz ...
Trudno powiedziec bez wiekszej liczby szczegolow ...

0

Znalazłem błąd. Program się wywala jeżeli łączę się do mysqla:

         conn = mysql_init (NULL);

Ale co jest źle? próbowałem kilku schematów łączenia się i ciągle jest źle...

1 użytkowników online, w tym zalogowanych: 0, gości: 1