java - Sockets with router port fowarding causes slow connection. How can I fix that? -


i have been making online java game past months. connection worked great on lan(hamachi) local pc not external devices. tried router port fowarding (which more interesting hamachi) external pc connection slow (about 4 sec delay)...
thought network algorith game not effective created simple program sends via tcp/ip small packages , result slow. tried turn off firewall , antivirus, tests didn't show change.

can explain me how decrease latency of connection or why java sockets slow?
(i use router linksys model no: wrt54g, eclipse ide)

appreciated.

here logs testing program:

on local pc...

trying connect xxx.xxx.xxx.xxx... (from router port fowarding)
sent 10 request... (avg: 238 ms)
10 request, 4631 miliseconds has elapsed.

trying connect phil-pc... (from hamachi local network)
sent 10 request... (avg: 0 ms)
10 request, 10 miliseconds has elapsed.

on external pc...

trying connect xxx.xxx.xxx.xxx... (from router port fowarding)
sent 10 request... (avg: 235 ms)
10 request, 4418 miliseconds has elapsed.

trying connect phil-pc... (from hamachi local network)
sent 10 request... (avg: 245 ms)
10 request, 4808 miliseconds has elapsed.

here's source code settcpnodelay(true) added, took half time complete 10 requests. «for 10 request, 2136 miliseconds has elapsed.» try in game tonight or tomorrow !

package segp10039402;    import java.awt.borderlayout;  import java.io.fileinputstream;  import java.io.ioexception;  import java.io.objectinputstream;  import java.io.objectoutputstream;  import java.net.serversocket;  import java.net.socket;    import javax.swing.jframe;  import javax.swing.jlabel;  import javax.swing.joptionpane;    public class debugserver {    	static serversocket server;  	  	public static void main(string[] args)   	{  		debugserver debugserver = new debugserver();  	}    	public debugserver()  	{  		try  		{  			server = new serversocket(2620);  			new thread(accept).start();  			createinterface();  		}  		catch(ioexception ex)  		{  			joptionpane.showmessagedialog(null,"error: " + ex.getmessage(), "alert", joptionpane.error_message);  			system.exit(0);  		}  	}  	  	private void createinterface()   	{  		jframe frame = new jframe();  		jlabel label = new jlabel("server");  		frame.add(label);  		frame.setvisible(true);  	}    	private static runnable accept = new runnable()  	{  		@override  		public void run()  		{  			objectoutputstream oos;  			objectinputstream ois;  			  			while(true)  			{  				socket socket;  				try  				{  					system.out.println("server online...");  					socket = server.accept();  					system.out.println("new connection...");  					for (int i=0; i<10;++i)  					{  						system.out.println("=================="+i+"======================");  						//receive send  						ois = new objectinputstream(socket.getinputstream());  						long packet = (long) ois.readobject();  						oos = new objectoutputstream(socket.getoutputstream());  						system.out.println("client ping: "+(long)(system.currenttimemillis()-packet)+" ms");  						//send  						oos.writeobject(system.currenttimemillis());  						oos.flush();  						//receive  						ois = new objectinputstream(socket.getinputstream());  						packet = (long) ois.readobject();  						system.out.println("server ping: "+packet+" ms");  					}  				}   				catch (ioexception e) {e.printstacktrace();} catch (classnotfoundexception e){e.printstacktrace();}  			}  		}  	};  }
package segp10049302;    import java.io.ioexception;  import java.io.objectinputstream;  import java.io.objectoutputstream;  import java.net.socket;  import java.net.unknownhostexception;    import javax.swing.jframe;  import javax.swing.jlabel;    public class debugclient   {  	public static socket socket;  	public final int total_request = 10;  	  	public static void main(string[] args)   	{  		debugclient debugclient = new debugclient();  	}  	  	public debugclient()  	{  		createinterface();  		createconnection();  	}  	  	public void createconnection()  	{  		try   		{  			int port = 2620;  			string ip = "184.163.171.xxx";	  			//string ip = "phil-pc";  			system.out.println("trying connect "+ip+"...");  			socket = new socket(ip, port);  			socket.settcpnodelay(true);  			objectoutputstream oos;  			objectinputstream ois;  			//send  			long currenttime = system.currenttimemillis();  			for (int i=0; i<10;++i)  			{  				system.out.println("=================="+i+"======================");  				oos = new objectoutputstream(socket.getoutputstream());  				oos.writeobject(system.currenttimemillis());  				oos.flush();  				system.out.println("sent current time");  				//receive  				ois = new objectinputstream(socket.getinputstream());  				long incomingpacket = (long) ois.readobject();  				long incomingping = (long)(system.currenttimemillis()-incomingpacket);  				system.out.println("client ping: "+ incomingping+" ms");  				//send  				oos = new objectoutputstream(socket.getoutputstream());  				oos.writeobject(incomingping);  				oos.flush();  			}  			long totaltimeelapsed = (long)((system.currenttimemillis()-currenttime));  			system.out.println("for "+total_request+" request, "+totaltimeelapsed+" miliseconds has elapsed.");  		}  		catch (unknownhostexception e)   		{  			e.printstacktrace();  		}   		catch (ioexception e)  		{  			e.printstacktrace();  		}  		catch (exception e)  		{  			e.printstacktrace();  		}  	}  	  	private void createinterface()   	{  		jframe frame = new jframe();  		jlabel label = new jlabel("client");  		frame.add(label);  		frame.setvisible(true);  	}  }


Comments

Popular posts from this blog

android - MPAndroidChart - How to add Annotations or images to the chart -

javascript - Add class to another page attribute using URL id - Jquery -

firefox - Where is 'webgl.osmesalib' parameter? -