Socket Connection

Hi Guys,

Ok, This problem really got me. What I am trying to do is, I have a client and a server program. There is a text file for a client which specifies to what all servers it has to connect to. So, when client starts it reads the file and it has to connect to all the mentioned servers. But now the problem is, that once I connect to the first server, it goes in while loop where client waits for read or write request from the user, therefore it cannot connect to other mentioned servers. And the way I want it to work is, that it should first of all connect to all the mentioned servers and then wait for read or write request from the user.

Any help on this would be greatly appreciated.

Thanks
your current design cant handle the situation..
see your main program will run in the main thread, and connection to each server will be in a different thread. this will solve your problem. now what happen is all your server connections will be in a new thread and the main program can also work, if a new server comes up it can create a new thread can connect to that also. does this make sense???


ok let me show a piece of code!!! i have a server which can handle multiple clients.. as a new request comes to it, it creates a new thread to handle the request..

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
//this thread will keep on accepting new connections forever..
//keep accepting connections

void some_function()
{
	while(1)

	{

		ClientSocket = accept(ServerSocket,NULL,NULL);

		if (ClientSocket == INVALID_SOCKET)

		{

			ShowMessage(_T("Invalid Socket"));

			return;

		}		

		

		//hThread = _beginthread(RecvThread,0,(void *)ClientSocket);

		hThread = _beginthreadex(NULL,0,RecvThread,(void *)ClientSocket,

					CREATE_SUSPENDED,&ThreadID);

		i = 0;

		while(g_treeclient[i].hTree != 0)

		{

			i++;

		}



		//for each thread started we save the client with which it is connected

		//the third parameter hTree will be updated when the a new tree is created.

		g_treeclient[i].ClientSocket = ClientSocket;

		ResumeThread((void*)hThread);



	}
}//some_function ends...


//this is threaded function which handles requests from the clients
//when the clients closes the while loops breaks and the thread will close.
//even if 100 clients are running, a break will keep on closing all the clients one by one.
//on closing the server i request all the clients to close themselves.
unsigned int __stdcall RecvThread(void *pParam)

{

	XINFO				xi;

	int				nRecv;

	SOCKET		ClientSocket;

	HWND			hParent;

	HWND			hDlg;

	



	//...some code



	ClientSocket = (SOCKET)pParam;


	//some code..


	SHGetSpecialFolderPath(GetFocus(),szPath,CSIDL_DESKTOPDIRECTORY,0);



	while(1)

	{	

		nRecv = recv(ClientSocket,(TCHAR*)&xi,sizeof(XINFO),0);

		switch(xi.infotype)

		{

			case ROOT:

			case CHILD:

				//update client socket info

				xi.SockInfo = ClientSocket;

				//ask parent to add node

				SendMessage(hParent,WM_MAKETREE,(WPARAM)&xi,0);

				break;



				//No interface interaction needed to make the file

				//so we can do everything here only.

			case FILEDATA_FINISH:

			case FILEDATA:

			{

				//some code

			}
			

			case ERROR_SENDING_DATA:

			{

				//some code...

			}

		}				



		//some code
	}

		

//	g_bRecvThreadWorking = FALSE;

	_endthreadex(0);

}

//just try to understand whats going on, may be this will give you some idea of your problem. 

though its a windows code, it is still understandable..
the problem it tries to solve is exactly like yours..
i hope this will help.. :)
Hey man, Thanks for reply. But I don't want to get into threading stuff right now. I know it's not that bad but I would rather stay away from threads at this time and submit my thing than not submitting my thing. :)
Last edited on
Well, you could try and have the client go through and connect to all servers and put in into a vector, then run the "readfile()" or whatever you have for each one of your connections, then have it return when it is done.
see if you dont use threads, you code will block at somepoint or the other..
but if you dont want to use threads, its fine. then what you can do is first read an ip from the file and try connecting, if no more connections are there dont try to connect else your code will block.

try non-blocking sockets. i never used them but you can see if they can help you.
Hi Guys, Thanks for the reply. It turns out that the problem was trivial. As I have to connect all clients to a server before starting any other operation. So what I ended up doing was, I just stored all the servers to which I have to connect, and then just ran a while loop for these entries for the connect statement. And it worked fine.

Thanks once again for your help thou.
Topic archived. No new replies allowed.