Hejsa. Jeg har et problem med at når en client tilslutter sig min server som køre TCP, at den så ikke lukker forbindelsen til den client og derefter kan andre ikke tilslutte serveren. Og den client som tilsluttede kan blive ved med at sende data.
Her er min kode. Det er omkring bunden.
- #include <iostream>
- #include <winsock2.h>
- #include <mysql/mysql.h>
-
- using namespace std;
-
- MYSQL *connection, mysql;
- MYSQL_RES *result, *result2;
- MYSQL_ROW row; // , row2;
- int query_state, n, row2;
- char query2;
- void runServer(int serverid) {
- STARTUPINFO siStartupInfo;
- PROCESS_INFORMATION piProcessInfo;
-
- memset(&siStartupInfo, 0, sizeof(siStartupInfo));
- memset(&piProcessInfo, 0, sizeof(piProcessInfo));
-
- siStartupInfo.cb = sizeof(siStartupInfo);
- cout << serverid;
- }
- int main() {
- bool connecting = false, auth = false, start = false, stop = false;
-
- mysql_init(&mysql);
- connection = mysql_real_connect(&mysql,"localhost","root","","test_db",0,0,0);
-
- 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;
- }
-
- while(true)
- {
- if(client=accept(server,(struct sockaddr*)&from,&fromlen)) {
- char temp[512];
- sprintf(temp, "TRUE");
- send(client,temp,strlen(temp),0);
- } else {
- char temp2[512];
- sprintf(temp2, "FALSE");
- send(client,temp2,strlen(temp2),0);
- }
- int cont = 1;
- while (cont) {
- bool fisk = false;
- char buffer[1024];
- int received = recv(client, buffer, sizeof(buffer) - 1, 0);
- if (received <= 0) {
- cont = 0;
- } else {
- buffer[received] = 0;
- int id = atoi(buffer);
- // Can the client connect?
- if (strcmp(buffer, "") != 0 && strcmp(buffer, "request_auth") != 0 && strcmp(buffer, "start") != 0 && start == false){
- printf("Connection from %s\n", buffer);
- connecting = true;
- }
- // Does he haver permission? And is it a real connection?
- if(strcmp(buffer, "request_auth") == 0 && connecting == true) {
- query2 = mysql_query(connection, "SELECT * FROM users WHERE username='test' AND password='test'");
- result2 = mysql_store_result(connection);
- row2 = mysql_num_rows(result2);
- if(row2 == 1) {
- char temp3[512];
- sprintf(temp3, "AUTH_TRUE");
- send(client,temp3,strlen(temp3),0);
- auth = true;
- } else {
- char temp4[512];
- sprintf(temp4, "AUTH_FALSE");
- send(client,temp4,strlen(temp4),0); }
- //if(strcmp("Z", row2[4]) == 0) { runServer(1); }
- }
- }
- // What do our client want to do?
- if(strcmp(buffer, "start") == 0 && connecting == true && auth == true) {
- // Start...
- start = true;
- char temp5[512];
- sprintf(temp5, "START_TRUE");
- send(client,temp5,strlen(temp5),0);
- }
- // Which server?
- // Det er efter min mening her omkring at den skal lukkes, efter at serveren har modtaget alle 4 forespørgelser.
- int newbuffer = atoi(buffer);
- if(newbuffer > 0 && start == true && connecting == true && auth == true) {
- runServer(newbuffer);
- }
- }
- }
- closesocket(server);
- mysql_close(connection);
- WSACleanup();
- }
-
-
- }
Det er omkring min kommentar nederst at jeg mener den burde lukkes, jeg har prøvet en masse ting men intet virkede. Så nu står jeg lidt på bar bund.
Håber I kan hjælpe.
Mvh.
Magnus.
Indlæg senest redigeret d. 09.05.2010 15:16 af Bruger #15047