Samaynta xogta xogta ee loogu talagalay isku xirka fog

Aan ku bilowno xaqiiqda ah inay jiraan kiisas marka aad u baahan tahay inaad samayso codsi xidhiidh la leh kaydka xogta. Tan waxaa loo sameeyaa si aan loogu daadagin horumarka dambe oo xoogga la saaro xagga hore ee gacan iyo xirfad la'aan awgeed. Ma dhihi karo xalkaygu wuxuu ahaan doonaa mid badbaado leh, laakiin wuu shaqeeyaa.

Maadaama aanan jeclayn bixinta kharashka martigelinta, waxaan isticmaalay shabakada shaqadayda, waxaa jira IP cad. Waa kan qaab dhismeedkeeda:

Samaynta xogta xogta ee loogu talagalay isku xirka fog

Waxaan haystaa dhowr kombuyuutar, oo si sax ah 192.168.1.2 (loo yaqaan 192.168.0.2) oo Linux lagu rakibay iyo 192.168.0.3 oo leh Windows. Guud ahaan, waxaan u doortay mysql codsigeyga oo eegay waxa laga heli karo Linux. Horay ayaa loo rakibay, laakiin qofna ma garanayo erayga sirta ah, kuwii yaqaanayna way illoobeen (kuwii iga horreeyay). Markii aan ogaaday in qofna uusan u baahnayn, waan tirtiray oo isku dayay inaan mar kale ku rakibo. Ma jirin xusuus ku filan, oo maadaama si aan qaladkan u xalliyo waa inaan ku xidhaa kormeeraha iyo kiiboodhka jiirka, waxaan go'aansaday inaan ka tanaasulo arrintan. Intaa waxaa dheer, mashiinka Windows-ka leh ayaa aad uga awood badan oo lagu daray, waxaan ku hayaa laptop-kayga guriga. Mabda 'ahaan, ma qeexi doono rakibidda lafteeda; waxaa jira buugag badan iyo fiidiyowyo ku saabsan. Markii aan ku rakibay mysql mashiinka Windows, waxaan go'aansaday in aan miiska ka dhigo laptop-kayga oo aan ka dhigo goobta shaqada.

Waxaa loo sameeyaa sidatan (xaaladdayda):

mysqldump -uroot -p your_base > dump_file.sql

Marka xigta, waxaan ku abuureynaa keydka xogta cusub oo aan dib u soo celinayna mashiinka "cusub".

mysql -h localhost -u root -p

create database your_base;
use your_base;

mysql -uroot -p your_base < dump_file.sql

show tables;


Faylka kaydinta waa in lagu dhejiyaa mashiinka cusub, laga yaabee, haddii aan ku jirin tusaha utility-ga, ka dibna jidka buuxa ee loo maro. (Kaliya waxaan ku dhejiyay kaydka GitHub oo waxaan ku dhejiyay mishiin cusub). Waxaan ku dari lahaa sida miisaska laftooda loo abuuray, laakiin ma badbaadin sawirada sawirada, oo waxaan u maleynayaa inaysan ku adkeyn xitaa ardayga 2-3 sano.

Marka dhammaan miisaska la soo celiyo, waa waqtigii la heli lahaa meel fog oo xogta xogta la heli karo. Guud ahaan, amarada noocan oo kale ah ma horseedin guul (waxa ay kaliya siisay ogolaanshaha akhriska ee xulashada)

create user 'client'@'%' IDENTIFIED by 'client';
grant select on your_base . * to 'client'@'%';
flush privileges;

Si sax ah, waxaan ku xidhi karaa xogta xogta oo keliya amarka,

mysql -h localhost -u client -pclient

laakiin kani wuu sii samayn kari waayay

mysql -h 192.168.0.3 -u client -pclient

Tani iima shaqayn, mana ku xidhi karo ciwaankan xidid ahaan.

Barnaamijka mysql workbench wuxuu caawiyay; goobaha, u beddel localhost % wuuna shaqeeyaa, in kasta oo macmiilku aanu caawin. Hadda waxaad ku xidhi kartaa kaydka konsole ama koodka ciwaan kasta.

Samaynta xogta xogta ee loogu talagalay isku xirka fog

Waxa kale oo aad u baahan tahay inaad samaysato shabakad guri ama ganacsi oo aad damiso firewall-ka Windows, haddii kale xitaa ma awoodid inaad ping-ga ku dhejiso mashiinkan (iska daa in aad ku xidhid xogta xogta).

Kala badh shaqada ayaa dhammaatay, hadda waxaan u baahanahay inaan awood u yeesho inaan ku xidho xogta xogta guriga.

Sida aad ka arki karto jaantuska shabakada, si aad u gasho internetka waxaad u baahan tahay inaad ka tagto 192.168.0.3 ilaa 192.168.1.1 (router), aynu u gudubno dhanka kale. Aynu habaynno dariiqa laga bilaabo 192.168.1.1 ilaa 192.168.1.2 sidan:

Samaynta xogta xogta ee loogu talagalay isku xirka fog

Guud ahaan, sawirku ma muujinayo, markaa waxaan ku qori doonaa gacanta:

route add 192.168.0.0 mask 255.255.255.0 gateway 192.168.1.2

Tan waxa lagu samayn karaa hal subnet, taas oo ah, isla markiiba uma gudbin kartid ciwaanka 192.168.0.2 ama 192.168.0.3

Tani waa lagama maarmaan si uu router u ogaado halka uu ku yaal subnet 192.168.0.0/24 (barashada aasaasiga ah ee shabakadaha ayaa faa'iido leh).

Hadda waxaan ku darnaa gudbinta dekedda 3306 (dekedda mysql ee caadiga ah (haddii aadan bedelin inta lagu jiro rakibidda)) cinwaanka 192.168.1.2

Samaynta xogta xogta ee loogu talagalay isku xirka fog

Waxa ugu adag ee hadhay in la sameeyo waa in lagu sameeyo gudbinta mashiinka Linux (waxa ay leedahay laba kaarar network 192.168.1.2 (enp3s1 interface) iyo 192.168.0.2 (enp3s0 interface) si ay kaararka shabakadu u ogaadaan waxa laga soo wareejinayo 192.168.1.2 ilaa 192.168.0.2, ka dibna mashiinkayaga Windows ee leh MySql.

sudo iptables -A FORWARD -i enp3s1 -o enp3s0 -p tcp --syn --dport 3306 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -i enp3s1 -o enp3s0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A FORWARD -i enp3s0 -o enp3s1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -t nat -A PREROUTING -i enp3s1 -p tcp --dport 3306 -j DNAT --to-destination 192.168.0.3
sudo iptables -t nat -A POSTROUTING -o enp3s0 -p tcp --dport 3306 -d 192.168.0.3 -j SNAT --to-source 192.168.1.2
и последняя строчка сохраняет введенные команды чтобы они при перезапуске оси не стерлись
sudo service iptables-persistent save

Kuwaas. Sadarka 1aad macneheedu waa in aan aqbalno isku xirka koowaad, 2aad iyo 3aad ee aan u diri karno baakadaha labada jiho, 4aad iyo 5aad waxay ka dhigan tahay in la beddelo meesha loo socdo iyo cinwaannada isha. Iyo voila, waxaad ku xidhi kartaa guriga adoo isticmaalaya mysql. Ugu dambayntiina, koodka C++ ee sidan sameeya:

//DataBaseConnection.cpp
#include "DataBaseConnection.h"

DataBaseConnection::DataBaseConnection()
{
}
void DataBaseConnection::Connect()
{
	// Получаем дескриптор соединения
	conn = mysql_init(NULL);
	if (conn == NULL)
	{
		// Если дескриптор не получен – выводим сообщение об ошибке
		fprintf(stderr, "Error: can'tcreate MySQL-descriptorn");
		//exit(1); //Если используется оконное приложение
	}
	// Подключаемся к серверу
	if (!mysql_real_connect(conn, "192.168.0.3", "root", "password", "your_base", NULL, NULL, 0))
	{
		// Если нет возможности установить соединение с сервером 
		// базы данных выводим сообщение об ошибке
		fprintf(stderr, "Error: can't connect to database: %sn", mysql_error(conn));
	}
	else
	{
		// Если соединение успешно установлено выводим фразу - "Success!"
		fprintf(stdout, "Success!n");
	}
}
std::vector<std::string> DataBaseConnection::Query()
{
	vectordrum.clear();
	std::string query = "SELECT * FROM drum where id=0";
	const char * q = query.c_str();
	qstate = mysql_query(conn, q);
	if (!qstate)
	{
		res = mysql_store_result(conn);
		while (row = mysql_fetch_row(res))
		{
			//printf("ID: %s,Position: %s, Image: %sn", row[0], row[1], row[2]);
			vectordrum.push_back(row[2]);
		}
	}
	else
	{
		std::cout << "Query failed:" << mysql_error(conn) << std::endl;
	}
	return vectordrum;
}
void DataBaseConnection::Close()
{
	// Закрываем соединение с сервером базы данных
	mysql_close(conn);
}
DataBaseConnection::~DataBaseConnection()
{
	vectordrum.clear();
}
//DataBaseConnection.h
#pragma once
#include <iostream>
#include <mysql.h>
#include <vector>
#pragma comment(lib,"mysqlcppconn.lib")
#pragma comment(lib,"libmysql.lib")
class DataBaseConnection
{
public:
	DataBaseConnection();
	void Connect();
	std::vector<std::string> Query();
	void Close();
	~DataBaseConnection();
	MYSQL *conn;
	MYSQL_ROW row;
	MYSQL_RES *res;
	int qstate;
	std::vector<std::string> vectordrum;
};

Hadda waxaad si badbaado leh ugu diri kartaa barnaamijkan qof kasta, mana aha inaad dib u qorto si aad uga dhigto mid gudaha ah.

Source: www.habr.com

Add a comment