Just nu i M3-nätverket
Gå till innehåll

Socket hantering


windblown

Rekommendera Poster

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

 

Länk till kommentar
Dela på andra webbplatser

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();
}

 

Länk till kommentar
Dela på andra webbplatser

 

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.

 

 

 

Länk till kommentar
Dela på andra webbplatser

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]

Länk till kommentar
Dela på andra webbplatser

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

 

Länk till kommentar
Dela på andra webbplatser

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...

 

Länk till kommentar
Dela på andra webbplatser

 

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

 

?

 

Länk till kommentar
Dela på andra webbplatser

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

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...