Hejsa.
Jeg har et C++ program som pt. køre vha. TCP socket. Den looper mens den er true og tillader mange tilslutninger. Men mit problem er så at jeg ikke kan sende eller modtage mere end én ting pr. tilslutning. Jeg sender f.eks. "1" til min server vha. et php script. Og så sender den mig "OK" tilbage. Men så kan jeg ikke sende mere eller modtage mere. Jeg vil gerne sende 3 ting og modtage 3 ting. I denne rækkefølge. Den der atoi() funktion tillader kun tal.
Fra klienten.
1. Test om tilslutningen er ok.
- Modtag værdien 1 fra serveren. (1 = tilslutnigen blev lavet korrekt)
2. Send et brugernavn og kodeord.
- Serveren checker om brugernavn og kodeord passer med mysql databasen.
- Og så verificere om der er rigtigheder nok.
3. Send forespørgelse om et eller andet.
- Modtag om det blev gjort rigtigt.
Her er min php kode..
- <?php
- function socket_open($ip="127.0.0.1", $port="15789") {
- $link = fsockopen($ip, $port, $errno, $errstr);
- return $link;
- }
- $CreateSocket = socket_open("", 6666);
- fwrite($CreateSocket, 0);
- fread($CreateSocket, 16);
-
- ?>
Og så min c++ kode.
- #include <iostream>
- #include <winsock2.h>
- #include <mysql/mysql.h>
-
- using namespace std;
-
- MYSQL *connection, mysql;
- MYSQL_RES *result;
- MYSQL_ROW row;
- int query_state, n;
-
- int main() {
- cout << "starting";
- mysql_init(&mysql);
- connection = mysql_real_connect(&mysql,"localhost","root","","test_db",0,0,0);
- if (connection == NULL) {
- cout << mysql_error(&mysql) << endl;
- return 0;
- }
- query_state = mysql_query(connection, "select * FROM version");
- if (query_state !=0) {
- cout << mysql_error(connection) << endl;
- return 0;
- }
-
- result = mysql_store_result(connection);
- while ( ( row = mysql_fetch_row(result)) != NULL ) {
- cout << row[1] << "\r\n";
- }
- cout << "::: Ready for connections! :::\r\n";
- SOCKET server;
- WSADATA wsaData;
- sockaddr_in local;
- int wsaret=WSAStartup(0x101,&wsaData);
- SOCKET client;
- sockaddr_in from;
- int fromlen=sizeof(from);
-
- if(wsaret!=0)
- {
- return 0;
- }
-
- local.sin_family=AF_INET;
- local.sin_addr.s_addr=INADDR_ANY;
- local.sin_port=htons((u_short)6666);
-
- server=socket(AF_INET,SOCK_STREAM,0);
-
- if(server==INVALID_SOCKET)
- {
- return 0;
- }
- if(bind(server,(sockaddr*)&local,sizeof(local))!=0)
- {
- return 0;
- }
- if(listen(server,10)!=0)
- {
- return 0;
- }
- STARTUPINFO siStartupInfo;
- PROCESS_INFORMATION piProcessInfo;
-
- memset(&siStartupInfo, 0, sizeof(siStartupInfo));
- memset(&piProcessInfo, 0, sizeof(piProcessInfo));
-
- siStartupInfo.cb = sizeof(siStartupInfo);
-
- while(true)
- {
- char temp[512];
- char temp2[512];
- client=accept(server,(struct sockaddr*)&from,&fromlen);
- sprintf(temp, "OK");
-
- int ret;
- char buffer[1024];
- memset(buffer, 0, sizeof (buffer));
- ret = recv(client, buffer, sizeof(buffer), 0);
- buffer[ret] = 0;
- int id = atoi(buffer);
- char * username = buffer;
- send(client,temp,strlen(temp),0);
- sprintf(temp2, "lol");
- send(client,temp2,strlen(temp2),0);
-
- cout << "Connection from " << inet_ntoa(from.sin_addr) << "\r\n";
- cout << "Requested data id: " << id << "\r\n";
- switch(id) {
- case 0:
- cout << "Connection test from " << inet_ntoa(from.sin_addr) << "\r\n";
- break;
- case 1:
- cout << "error 1";
- break;
- default:
- cout << "Error #2";
- break;
- }
- cout << "\n";
- closesocket(client);
- }
- closesocket(server);
- mysql_close(connection);
- WSACleanup();
- system("pause");
- }
Hvordan kan jeg lave det? Jeg har brugt nogle timer på eller rettere dage på at prøve lidt af hver. Det er på Windows.
- Mvh Magnus.
Indlæg senest redigeret d. 01.05.2010 01:28 af Bruger #15047