Just nu i M3-nätverket
Jump to content

Socket hantering


windblown

Recommended Posts

Jag har en tomcat server som använder jsp. Har en tråd som ligger och

lyssnar efter uppkopplingar på en port.

Fram till nu har jag bara haft en uppkoppling mot den porten, men nu vill

jag kunna ta emot flera. Med andra ord jag vill att uppkopplingen som

sker mot den porten ska tilldelas ett annat portnummer, så att huvud porten

fortfarande är öppen för nya uppkopplingar.

 

Är det någon som har tips på hur man gör?

Det är en java.net.ServerSocket som jag använder för att lyssna med.

 

/W

 

Link to comment
Share on other sites

Du behöver trådar... en per etablerad uppkoppling.

 

Typ:

 

class SocketThread implements Runnable
{   
   private Socket mySocket;

   public SocketThread(Socket aSocket)
   {
       mySocket = aSocket;
   }

   public void run()
   {
       // Läs och skriv till din socket här.
   }
}

och du använder klassen såhär:

 

ServerSocket theListener = new ServerSocket(port);
for (;
{
   Socket theNewConnection = theListener.accept();
   new Thread(new SocketThread(theNewConnection)).start();
}

 

Link to comment
Share on other sites

 

Tack för tipset, men det hjälper mig nog inte så mycket. (kan förstått fel)

Det är sådär jag har nu, trixet är att jag vill hålla ServerSocket theListener

öppen för nya uppkopplingar mot just den porten. Så jag vill "skyffla"

uppkopplingen vidare till en ny socket (på den lokala servern).

 

någonting i stil med

 

Socket theNewSocket = CreateANewLocalSocket(theListener.accept());

 

och så kan jag sen "starta om" the Listerner.

 

 

 

Link to comment
Share on other sites

Varför skulle du starta om ServerSocketen?

Den kan acceptera hur många uppkopplingar som helst; den socket som skapas när du gör accept() har per automatik en annan lokal port än den som ServerSocketen lyssnar på, det är inbyggt.

[edit]

 

Ehh.. nu var jag för snabb angående det där med lokal port. Vete fan hur dom lyckas göra det i Java. Men faktum kvarstår; du kan använda en ServerSocket-instans för att ta emot hur många uppkopplingar som helst.

 

Pröva följande:

 

import java.net.*;

 

[log]public class A implements Runnable

{

public void run()

{

try

{

Thread.sleep(100);

new Socket("localhost", 1029);

Thread.sleep(100);

new Socket("localhost", 1029);

Thread.sleep(100);

new Socket("localhost", 1029);

 

}

catch (Throwable t){}

 

}

 

public static void main(String[] args) throws Exception

{

new Thread(new A()).start();

ServerSocket theServerSocket = new ServerSocket(1029);

Socket theNewConnection = theServerSocket.accept();

System.out.println(theNewConnection.getLocalPort());

theNewConnection = theServerSocket.accept();

System.out.println(theNewConnection.getLocalPort());

theNewConnection = theServerSocket.accept();

System.out.println(theNewConnection.getLocalPort());

}

}

[/log]

[inlägget ändrat 2005-07-20 11:16:01 av Que]

Link to comment
Share on other sites

Men det görs ju inte? Serversocketen skapas en gång INNAN for-loopen och återanvänds varv för varv...

 

Link to comment
Share on other sites

Jo det är nog sant man behöver nog inte starta om serverSocketen.

 

Men det verkar inte som att min uppkoppling får en annan lokal port.

Jag trodde oxå att det skulle vara så, men min uppkoppling har samma

port som serverSocketen.

Ska kolla igen...

 

Link to comment
Share on other sites

 

Uppkopplingen använder samma lokala socket som ServerSocket.

 

kan man göra en ny socket.. (eller ServerSocket) och på nåt sätt skicka över kommunikationen till den socketen?

 

Typ->

 

Socket evenNewerSocket = theNewSocket

 

?

 

Link to comment
Share on other sites

Gunnar Dahlström

Varför byta socket/port?

 

Tänk på en vanlig webserver, servern använder alltid port 80 oavsett hur många som kör mot den samtidigt.

 

Det som är unikt är paret: remoteip:remoteport - localip:lokalport.

 

Här kan du läsa mera om hur man sätter upp det i java: http://java.sun.com/docs/books/tutorial/networking/sockets/clientServer.html

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...