Reputation: 9
I have a server socket that accepts connections and passes them off to a worker thread. This works concurrently when the connections come from different IP addresses. It will not accept a new connection from any given machine (ip address) until the previous connection is closed by that client.
How can I make this work?
Thanks in advance.
Edit: The requests from the same ip client will block until the previous completes.
private ConcurrentLinkedQueue<WorkerThread> queueList = new ConcurrentLinkedQueue<WorkerThread>();
...
public void ServerSocketLoop()
{
try
{
ServerSocket sk = new ServerSocket(iPort);
while (!sk.isClosed())
{
Logger.Log(this, Logger.CONNECTION_ONLY, "Loop: ");
int cnt = getQueueList().size();
Socket clientSocket = sk.accept();
String clIp = clientSocket.getInetAddress().getHostAddress();
boolean match=false;
if(!allowedIps.isEmpty())
{
for(String alIp : allowedIps.keySet())
{
if(clIp.startsWith(alIp))
{
match=true;
break;
}
}
}
else
match=true;
if(match)
{
try
{
Logger.Log(this, Logger.CONNECTION_ONLY, "Accepting connection from: " + clIp);
WorkerThread scs = new WorkerThread(clientSocket, this);
getQueueList().add(scs);
} catch (Exception e)
{
Logger.Log(this, e);
}
} else
{
Logger.Log(this, Logger.CONNECTION_ONLY, "Refused connection from: " + clIp);
}
}
}
catch(Exception e)
{
Logger.Log(this, e);
}
}
Edit: More information.
The worker thread once started reads the (client) socket input stream, uses process builder to execute a command with the data read through the socket writes the results back through the output stream of the socket then closes the socket.
Log output: notice the connection at 20:06:10.305 from 192.168.1.32
[2013-09-28 20:04:51.181] Accepting connection from: /0:0:0:0:0:0:0:1%0:49460
[2013-09-28 20:04:51.497] Accepted socket
[2013-09-28 20:04:51.498] In: one
[2013-09-28 20:04:51.499] Looking for wrkr4237846575505157705.out
[2013-09-28 20:04:51.499] Start process
[2013-09-28 20:05:07.564] Accepting connection from: /192.168.1.32:32864
[2013-09-28 20:05:07.880] Accepted socket
[2013-09-28 20:05:07.881] In: one
[2013-09-28 20:05:07.881] Looking for wrkr2936790469462792093.out
[2013-09-28 20:05:07.881] Start process
[2013-09-28 20:05:24.600] Finished
[2013-09-28 20:05:24.601] Out: wrkr4237846575505157705 Sat Sep 28 20:04:51 CDT 2013
[2013-09-28 20:05:24.602] Out: wrkr4237846575505157705 Sat Sep 28 20:04:54 CDT 2013
[2013-09-28 20:05:24.603] Out: wrkr4237846575505157705 Sat Sep 28 20:04:57 CDT 2013
[2013-09-28 20:05:24.603] Out: wrkr4237846575505157705 Sat Sep 28 20:05:00 CDT 2013
[2013-09-28 20:05:24.604] Out: wrkr4237846575505157705 Sat Sep 28 20:05:03 CDT 2013
[2013-09-28 20:05:24.604] Out: wrkr4237846575505157705 Sat Sep 28 20:05:06 CDT 2013
[2013-09-28 20:05:24.605] Out: wrkr4237846575505157705 Sat Sep 28 20:05:09 CDT 2013
[2013-09-28 20:05:24.605] Out: wrkr4237846575505157705 Sat Sep 28 20:05:12 CDT 2013
[2013-09-28 20:05:24.605] Out: wrkr4237846575505157705 Sat Sep 28 20:05:15 CDT 2013
[2013-09-28 20:05:24.606] Out: wrkr4237846575505157705 Sat Sep 28 20:05:18 CDT 2013
[2013-09-28 20:05:24.607] Out: wrkr4237846575505157705 Sat Sep 28 20:05:21 CDT 2013
[2013-09-28 20:05:24.628] Accepting connection from: /0:0:0:0:0:0:0:1%0:49464
[2013-09-28 20:05:24.993] Accepted socket
[2013-09-28 20:05:24.995] In: two
[2013-09-28 20:05:24.996] Looking for wrkr1946064549539591675.out
[2013-09-28 20:05:24.996] Start process
[2013-09-28 20:05:40.984] Finished
[2013-09-28 20:05:40.985] Out: wrkr2936790469462792093 Sat Sep 28 20:05:07 CDT 2013
[2013-09-28 20:05:40.985] Out: wrkr2936790469462792093 Sat Sep 28 20:05:10 CDT 2013
[2013-09-28 20:05:40.986] Out: wrkr2936790469462792093 Sat Sep 28 20:05:13 CDT 2013
[2013-09-28 20:05:40.986] Out: wrkr2936790469462792093 Sat Sep 28 20:05:16 CDT 2013
[2013-09-28 20:05:40.987] Out: wrkr2936790469462792093 Sat Sep 28 20:05:19 CDT 2013
[2013-09-28 20:05:40.987] Out: wrkr2936790469462792093 Sat Sep 28 20:05:22 CDT 2013
[2013-09-28 20:05:40.988] Out: wrkr2936790469462792093 Sat Sep 28 20:05:25 CDT 2013
[2013-09-28 20:05:40.988] Out: wrkr2936790469462792093 Sat Sep 28 20:05:28 CDT 2013
[2013-09-28 20:05:40.988] Out: wrkr2936790469462792093 Sat Sep 28 20:05:31 CDT 2013
[2013-09-28 20:05:40.989] Out: wrkr2936790469462792093 Sat Sep 28 20:05:34 CDT 2013
[2013-09-28 20:05:40.989] Out: wrkr2936790469462792093 Sat Sep 28 20:05:37 CDT 2013
[2013-09-28 20:05:58.109] Finished
[2013-09-28 20:05:58.110] Out: wrkr1946064549539591675 Sat Sep 28 20:05:25 CDT 2013
[2013-09-28 20:05:58.110] Out: wrkr1946064549539591675 Sat Sep 28 20:05:28 CDT 2013
[2013-09-28 20:05:58.110] Out: wrkr1946064549539591675 Sat Sep 28 20:05:31 CDT 2013
[2013-09-28 20:05:58.111] Out: wrkr1946064549539591675 Sat Sep 28 20:05:34 CDT 2013
[2013-09-28 20:05:58.111] Out: wrkr1946064549539591675 Sat Sep 28 20:05:37 CDT 2013
[2013-09-28 20:05:58.111] Out: wrkr1946064549539591675 Sat Sep 28 20:05:40 CDT 2013
[2013-09-28 20:05:58.112] Out: wrkr1946064549539591675 Sat Sep 28 20:05:43 CDT 2013
[2013-09-28 20:05:58.112] Out: wrkr1946064549539591675 Sat Sep 28 20:05:46 CDT 2013
[2013-09-28 20:05:58.112] Out: wrkr1946064549539591675 Sat Sep 28 20:05:49 CDT 2013
[2013-09-28 20:05:58.112] Out: wrkr1946064549539591675 Sat Sep 28 20:05:52 CDT 2013
[2013-09-28 20:05:58.113] Out: wrkr1946064549539591675 Sat Sep 28 20:05:55 CDT 2013
[2013-09-28 20:05:58.160] Accepting connection from: /0:0:0:0:0:0:0:1%0:49470
[2013-09-28 20:05:58.477] Accepted socket
[2013-09-28 20:05:58.479] In: three
[2013-09-28 20:05:58.480] Looking for wrkr7376110979239359337.out
[2013-09-28 20:05:58.480] Start process
[2013-09-28 20:06:10.305] Accepting connection from: /192.168.1.32:32870
[2013-09-28 20:06:10.469] Accepted socket
[2013-09-28 20:06:10.470] In: laurie
[2013-09-28 20:06:10.470] Looking for wrkr1695309805515169887.out
[2013-09-28 20:06:10.470] Start process
[2013-09-28 20:06:31.591] Finished
[2013-09-28 20:06:31.592] Out: wrkr7376110979239359337 Sat Sep 28 20:05:58 CDT 2013
[2013-09-28 20:06:31.592] Out: wrkr7376110979239359337 Sat Sep 28 20:06:01 CDT 2013
[2013-09-28 20:06:31.593] Out: wrkr7376110979239359337 Sat Sep 28 20:06:04 CDT 2013
[2013-09-28 20:06:31.593] Out: wrkr7376110979239359337 Sat Sep 28 20:06:07 CDT 2013
[2013-09-28 20:06:31.593] Out: wrkr7376110979239359337 Sat Sep 28 20:06:10 CDT 2013
[2013-09-28 20:06:31.594] Out: wrkr7376110979239359337 Sat Sep 28 20:06:13 CDT 2013
[2013-09-28 20:06:31.594] Out: wrkr7376110979239359337 Sat Sep 28 20:06:16 CDT 2013
[2013-09-28 20:06:31.594] Out: wrkr7376110979239359337 Sat Sep 28 20:06:19 CDT 2013
[2013-09-28 20:06:31.595] Out: wrkr7376110979239359337 Sat Sep 28 20:06:22 CDT 2013
[2013-09-28 20:06:31.595] Out: wrkr7376110979239359337 Sat Sep 28 20:06:25 CDT 2013
[2013-09-28 20:06:31.595] Out: wrkr7376110979239359337 Sat Sep 28 20:06:28 CDT 2013
[2013-09-28 20:06:31.642] Accepting connection from: /0:0:0:0:0:0:0:1%0:49472
[2013-09-28 20:06:31.958] Accepted socket
[2013-09-28 20:06:31.959] In: four
[2013-09-28 20:06:31.960] Looking for wrkr1689149287441159516.out
[2013-09-28 20:06:31.960] Start process
[2013-09-28 20:06:43.581] Finished
[2013-09-28 20:06:43.582] Out: wrkr1695309805515169887 Sat Sep 28 20:06:10 CDT 2013
[2013-09-28 20:06:43.582] Out: wrkr1695309805515169887 Sat Sep 28 20:06:13 CDT 2013
[2013-09-28 20:06:43.583] Out: wrkr1695309805515169887 Sat Sep 28 20:06:16 CDT 2013
[2013-09-28 20:06:43.583] Out: wrkr1695309805515169887 Sat Sep 28 20:06:19 CDT 2013
[2013-09-28 20:06:43.583] Out: wrkr1695309805515169887 Sat Sep 28 20:06:22 CDT 2013
[2013-09-28 20:06:43.584] Out: wrkr1695309805515169887 Sat Sep 28 20:06:25 CDT 2013
[2013-09-28 20:06:43.584] Out: wrkr1695309805515169887 Sat Sep 28 20:06:28 CDT 2013
[2013-09-28 20:06:43.584] Out: wrkr1695309805515169887 Sat Sep 28 20:06:31 CDT 2013
[2013-09-28 20:06:43.584] Out: wrkr1695309805515169887 Sat Sep 28 20:06:34 CDT 2013
[2013-09-28 20:06:43.585] Out: wrkr1695309805515169887 Sat Sep 28 20:06:37 CDT 2013
[2013-09-28 20:06:43.585] Out: wrkr1695309805515169887 Sat Sep 28 20:06:40 CDT 2013
[2013-09-28 20:07:05.061] Finished
[2013-09-28 20:07:05.062] Out: wrkr1689149287441159516 Sat Sep 28 20:06:31 CDT 2013
[2013-09-28 20:07:05.062] Out: wrkr1689149287441159516 Sat Sep 28 20:06:34 CDT 2013
[2013-09-28 20:07:05.062] Out: wrkr1689149287441159516 Sat Sep 28 20:06:37 CDT 2013
[2013-09-28 20:07:05.063] Out: wrkr1689149287441159516 Sat Sep 28 20:06:40 CDT 2013
[2013-09-28 20:07:05.063] Out: wrkr1689149287441159516 Sat Sep 28 20:06:44 CDT 2013
[2013-09-28 20:07:05.063] Out: wrkr1689149287441159516 Sat Sep 28 20:06:47 CDT 2013
[2013-09-28 20:07:05.064] Out: wrkr1689149287441159516 Sat Sep 28 20:06:50 CDT 2013
[2013-09-28 20:07:05.064] Out: wrkr1689149287441159516 Sat Sep 28 20:06:53 CDT 2013
[2013-09-28 20:07:05.064] Out: wrkr1689149287441159516 Sat Sep 28 20:06:56 CDT 2013
[2013-09-28 20:07:05.065] Out: wrkr1689149287441159516 Sat Sep 28 20:06:59 CDT 2013
[2013-09-28 20:07:05.065] Out: wrkr1689149287441159516 Sat Sep 28 20:07:02 CDT 2013
[2013-09-28 20:07:05.093] Accepting connection from: /0:0:0:0:0:0:0:1%0:49524
[2013-09-28 20:07:05.409] Accepted socket
[2013-09-28 20:07:05.411] In: five
[2013-09-28 20:07:05.411] Looking for wrkr8081329232671108201.out
[2013-09-28 20:07:05.411] Start process
[2013-09-28 20:07:38.515] Finished
[2013-09-28 20:07:38.516] Out: wrkr8081329232671108201 Sat Sep 28 20:07:05 CDT 2013
[2013-09-28 20:07:38.516] Out: wrkr8081329232671108201 Sat Sep 28 20:07:08 CDT 2013
[2013-09-28 20:07:38.517] Out: wrkr8081329232671108201 Sat Sep 28 20:07:11 CDT 2013
[2013-09-28 20:07:38.517] Out: wrkr8081329232671108201 Sat Sep 28 20:07:14 CDT 2013
[2013-09-28 20:07:38.517] Out: wrkr8081329232671108201 Sat Sep 28 20:07:17 CDT 2013
[2013-09-28 20:07:38.518] Out: wrkr8081329232671108201 Sat Sep 28 20:07:20 CDT 2013
[2013-09-28 20:07:38.518] Out: wrkr8081329232671108201 Sat Sep 28 20:07:23 CDT 2013
[2013-09-28 20:07:38.518] Out: wrkr8081329232671108201 Sat Sep 28 20:07:26 CDT 2013
[2013-09-28 20:07:38.519] Out: wrkr8081329232671108201 Sat Sep 28 20:07:29 CDT 2013
[2013-09-28 20:07:38.519] Out: wrkr8081329232671108201 Sat Sep 28 20:07:32 CDT 2013
[2013-09-28 20:07:38.519] Out: wrkr8081329232671108201 Sat Sep 28 20:07:35 CDT 2013
Upvotes: 0
Views: 1768
Reputation: 9
Well dang, my test program was broken. Not to try to understand if the client side (PHP) is the culprit.
Old program.
echo "one" | nc -C localhost 5554
echo "two" | nc -C localhost 5554
echo "three" | nc -C localhost 5554
echo "four" | nc -C localhost 5554
echo "five" | nc -C localhost 5554
New program.
echo "one" | nc -C localhost 5554&
echo "two" | nc -C localhost 5554&
echo "three" | nc -C localhost 5554&
echo "four" | nc -C localhost 5554&
echo "five" | nc -C localhost 5554&
Thanks for all your answers. Sorry to waste your time.
[2013-09-29 12:10:16.605] jConnector 1.0.11: Listening on port 5554 Non-Blocking.
[2013-09-29 12:10:56.767] Accepting connection from: /0:0:0:0:0:0:0:1%0:56522
[2013-09-29 12:10:56.768] Accepting connection from: /0:0:0:0:0:0:0:1%0:56523
[2013-09-29 12:10:56.769] Accepting connection from: /0:0:0:0:0:0:0:1%0:56524
[2013-09-29 12:10:56.769] Accepting connection from: /0:0:0:0:0:0:0:1%0:56525
[2013-09-29 12:10:56.770] Accepting connection from: /0:0:0:0:0:0:0:1%0:56526
[2013-09-29 12:10:56.879] Accepted socket
[2013-09-29 12:10:56.879] Accepted socket
[2013-09-29 12:10:56.880] Accepted socket
[2013-09-29 12:10:56.880] Accepted socket
[2013-09-29 12:10:56.880] Accepted socket
[2013-09-29 12:10:56.925] In: two
[2013-09-29 12:10:56.926] In: three
[2013-09-29 12:10:56.926] In: four
[2013-09-29 12:10:56.926] In: five
[2013-09-29 12:10:56.926] In: one
[2013-09-29 12:10:56.926] Looking for wrkr5220076953748478982.out
[2013-09-29 12:10:56.926] Looking for wrkr3694455183701587793.out
[2013-09-29 12:10:56.926] Looking for wrkr4677686522325232523.out
[2013-09-29 12:10:56.926] Looking for wrkr4460853175870098981.out
[2013-09-29 12:10:56.926] Looking for wrkr1676325861140446848.out
[2013-09-29 12:10:56.927] Start process
[2013-09-29 12:10:56.927] Start process
[2013-09-29 12:10:56.927] Start process
[2013-09-29 12:10:56.927] Start process
[2013-09-29 12:10:56.927] Start process
[2013-09-29 12:11:30.049] Finished
[2013-09-29 12:11:30.050] Out: wrkr3694455183701587793 Sun Sep 29 12:10:56 CDT 2013
[2013-09-29 12:11:30.051] Out: wrkr3694455183701587793 Sun Sep 29 12:10:59 CDT 2013
[2013-09-29 12:11:30.051] Finished
[2013-09-29 12:11:30.051] Finished
[2013-09-29 12:11:30.051] Finished
[2013-09-29 12:11:30.051] Finished
[2013-09-29 12:11:30.051] Out: wrkr3694455183701587793 Sun Sep 29 12:11:02 CDT 2013
[2013-09-29 12:11:30.052] Out: wrkr4677686522325232523 Sun Sep 29 12:10:56 CDT 2013
[2013-09-29 12:11:30.052] Out: wrkr5220076953748478982 Sun Sep 29 12:10:56 CDT 2013
[2013-09-29 12:11:30.052] Out: wrkr1676325861140446848 Sun Sep 29 12:10:56 CDT 2013
[2013-09-29 12:11:30.052] Out: wrkr4460853175870098981 Sun Sep 29 12:10:56 CDT 2013
[2013-09-29 12:11:30.052] Out: wrkr3694455183701587793 Sun Sep 29 12:11:05 CDT 2013
[2013-09-29 12:11:30.052] Out: wrkr4677686522325232523 Sun Sep 29 12:10:59 CDT 2013
[2013-09-29 12:11:30.052] Out: wrkr5220076953748478982 Sun Sep 29 12:10:59 CDT 2013
[2013-09-29 12:11:30.052] Out: wrkr1676325861140446848 Sun Sep 29 12:10:59 CDT 2013
[2013-09-29 12:11:30.052] Out: wrkr4460853175870098981 Sun Sep 29 12:10:59 CDT 2013
[2013-09-29 12:11:30.053] Out: wrkr3694455183701587793 Sun Sep 29 12:11:08 CDT 2013
[2013-09-29 12:11:30.053] Out: wrkr4677686522325232523 Sun Sep 29 12:11:02 CDT 2013
[2013-09-29 12:11:30.053] Out: wrkr5220076953748478982 Sun Sep 29 12:11:02 CDT 2013
[2013-09-29 12:11:30.053] Out: wrkr1676325861140446848 Sun Sep 29 12:11:02 CDT 2013
[2013-09-29 12:11:30.053] Out: wrkr4460853175870098981 Sun Sep 29 12:11:02 CDT 2013
[2013-09-29 12:11:30.053] Out: wrkr3694455183701587793 Sun Sep 29 12:11:11 CDT 2013
[2013-09-29 12:11:30.053] Out: wrkr4677686522325232523 Sun Sep 29 12:11:05 CDT 2013
[2013-09-29 12:11:30.053] Out: wrkr5220076953748478982 Sun Sep 29 12:11:05 CDT 2013
[2013-09-29 12:11:30.054] Out: wrkr1676325861140446848 Sun Sep 29 12:11:05 CDT 2013
[2013-09-29 12:11:30.054] Out: wrkr4460853175870098981 Sun Sep 29 12:11:05 CDT 2013
[2013-09-29 12:11:30.054] Out: wrkr4677686522325232523 Sun Sep 29 12:11:08 CDT 2013
[2013-09-29 12:11:30.054] Out: wrkr3694455183701587793 Sun Sep 29 12:11:15 CDT 2013
[2013-09-29 12:11:30.054] Out: wrkr5220076953748478982 Sun Sep 29 12:11:08 CDT 2013
[2013-09-29 12:11:30.054] Out: wrkr1676325861140446848 Sun Sep 29 12:11:08 CDT 2013
[2013-09-29 12:11:30.054] Out: wrkr4460853175870098981 Sun Sep 29 12:11:08 CDT 2013
[2013-09-29 12:11:30.054] Out: wrkr4677686522325232523 Sun Sep 29 12:11:11 CDT 2013
[2013-09-29 12:11:30.055] Out: wrkr5220076953748478982 Sun Sep 29 12:11:11 CDT 2013
[2013-09-29 12:11:30.055] Out: wrkr3694455183701587793 Sun Sep 29 12:11:18 CDT 2013
[2013-09-29 12:11:30.055] Out: wrkr1676325861140446848 Sun Sep 29 12:11:11 CDT 2013
[2013-09-29 12:11:30.055] Out: wrkr4460853175870098981 Sun Sep 29 12:11:11 CDT 2013
[2013-09-29 12:11:30.055] Out: wrkr4677686522325232523 Sun Sep 29 12:11:15 CDT 2013
[2013-09-29 12:11:30.055] Out: wrkr5220076953748478982 Sun Sep 29 12:11:15 CDT 2013
[2013-09-29 12:11:30.055] Out: wrkr1676325861140446848 Sun Sep 29 12:11:15 CDT 2013
[2013-09-29 12:11:30.055] Out: wrkr4460853175870098981 Sun Sep 29 12:11:15 CDT 2013
[2013-09-29 12:11:30.055] Out: wrkr3694455183701587793 Sun Sep 29 12:11:21 CDT 2013
[2013-09-29 12:11:30.056] Out: wrkr4677686522325232523 Sun Sep 29 12:11:18 CDT 2013
[2013-09-29 12:11:30.056] Out: wrkr5220076953748478982 Sun Sep 29 12:11:18 CDT 2013
[2013-09-29 12:11:30.056] Out: wrkr1676325861140446848 Sun Sep 29 12:11:18 CDT 2013
[2013-09-29 12:11:30.056] Out: wrkr4460853175870098981 Sun Sep 29 12:11:18 CDT 2013
[2013-09-29 12:11:30.056] Out: wrkr4677686522325232523 Sun Sep 29 12:11:21 CDT 2013
[2013-09-29 12:11:30.056] Out: wrkr3694455183701587793 Sun Sep 29 12:11:24 CDT 2013
[2013-09-29 12:11:30.056] Out: wrkr5220076953748478982 Sun Sep 29 12:11:21 CDT 2013
[2013-09-29 12:11:30.056] Out: wrkr1676325861140446848 Sun Sep 29 12:11:21 CDT 2013
[2013-09-29 12:11:30.056] Out: wrkr4460853175870098981 Sun Sep 29 12:11:21 CDT 2013
[2013-09-29 12:11:30.057] Out: wrkr4677686522325232523 Sun Sep 29 12:11:24 CDT 2013
[2013-09-29 12:11:30.057] Out: wrkr5220076953748478982 Sun Sep 29 12:11:24 CDT 2013
[2013-09-29 12:11:30.057] Out: wrkr4460853175870098981 Sun Sep 29 12:11:24 CDT 2013
[2013-09-29 12:11:30.057] Out: wrkr1676325861140446848 Sun Sep 29 12:11:24 CDT 2013
[2013-09-29 12:11:30.057] Out: wrkr4677686522325232523 Sun Sep 29 12:11:27 CDT 2013
[2013-09-29 12:11:30.057] Out: wrkr5220076953748478982 Sun Sep 29 12:11:27 CDT 2013
[2013-09-29 12:11:30.058] Out: wrkr4460853175870098981 Sun Sep 29 12:11:27 CDT 2013
[2013-09-29 12:11:30.058] Out: wrkr1676325861140446848 Sun Sep 29 12:11:27 CDT 2013
[2013-09-29 12:11:30.057] Out: wrkr3694455183701587793 Sun Sep 29 12:11:27 CDT 2013
Upvotes: 0
Reputation: 718758
There is nothing magical about allowing a ServerSocket to accept multiple requests from the same IP. In fact, it will happen naturally ... and it looks like your code will do that.
However, your code (as shown) is creating threads but not starting them. Unless you start a thread, its run()
method won't run.
(I assume that WorkerThread
is a subclass of Thread
.)
In other words, you are already accepting the request connections, but it is doubtful that it is reading and processing the requests.
For what it is worth, it is a BAD IDEA to write your worker logic by extending the Thread
class. It is better to implement the Runnable
interface, and pass that as a constructor argument to a plain Thread
object. Or better still use something like a ThreadPoolExecutor
with a bounded thread pool to manage the creation of threads and queuing of requests.
Upvotes: 2