Att programmera eller att inte programmera, det är frågan?
lyssna efter inkommande data från flera klienter samtidigt?
Visa signatur
hej, jag vet inte om det är ett krav att du ska ha en lista med sockets men det är inte så skalbart att läsa socket input sekventiellt. Om det är att krav kan du läsa på om SocketChannel/ServerSocketChannel/NIO som löser problemet med blockerande socket input/output (men jag tycker det kanske är lite overkill just nu)
Förslag på vanlig enkel lösning är att skapa en tråd för varje klient och läsa input från dem parallellt. Se min halv-pseudo java nedan, borde gå att översätta (saknas lite try/catch, imports och kanske syntax)
class ServerHandler {
public void startServer() {
ServerSocket serverSock = new ServerSocket(6677);
ClientSockWorker client = null;
while (true) {
client = new ClientSockWorker(serverSock.accept()); //blockar till connection skapats
new Thread(client).start();//skapar och startar en ny tråd som kallar på objektets(client) run()-metod
//tips är att kanske spara client-objekten i en lista så du har lite kontroll över vad som kör och kan limitera till 4 connections t ex
}
}
class ClientSockWorker implements Runnable {
Socket sock;
boolean clientConnected = false;
ClientSockWorker(Socket sock) {
this.sock = sock;
}
public void run(){
clientConnected = true;
while (clientConnected) {
//gör något med sock.getInputStream();
//när socketen inte längre går att läsa från sätt clientConnected=false;
}
}
}
public static void main(String[] args){
new ServerHandler().startServer();
}
}
ClientSockWorker blir då en wrapper runt socketen och dessa objekt skulle du ju då kunna lagra i en lista på samma sätt som du gjorde med råa sockets. När du vill svara klienten kan du ju referera till attributet "sock" från wrappern.
Citera flera
Citera
(4)
Hårdvara
- Idag Iphones marknadsandel faller i USA 8
- Igår Airtec Pro Type1 – batteridrivet alternativ till tryckluft på burk 46
- Igår Nu stiger hårddiskpriserna med uppemot 10 procent 14
- Igår Analytiker: Apple har överskattat intresset för Vision Pro 50
- 24 / 4 AMD, Nvidia och Intel – vad är det för skillnad mellan grafikkortstillverkarna? 26
Mjukvara
Datorkomponenter
Ljud, bild och kommunikation
- Simulator - hjälp/tips på bildförskjutning sökes18
- Nyhetstips!427
- Iphones marknadsandel faller i USA8
- Posta din hastighet!2443
- Telenors router och netgear sammankopplade2
- SweSpacers - tråden om rymden237
- Konsumentverket granskar tio nätbutiker som lurat kunder13
- "TSMC var den värsta tänkbara arbetsplatsen på jorden"1
- Ny teknik kan dubblera litiumbatteriers livslängd46
- Deshroud och vilka fläktar att föredra?7
- Köpes Luftkylning och Fläktar
- Köpes Nvidia Quadro P400,600 eller 620
- Säljes Dell Latitude 7530 15,6”
- Köpes Önskar köpa 6700xt eller 3070
- Säljes Asus Geforce RTX 2070 8GB Strix Gaming OC
- Köpes Köper bärbara datorer, trasiga, utan skärm etc.
- Säljes Lenovo Thinkcentre M73
- Säljes Lenovo Legion Slim 5 14” OLED
- Säljes Asus VG248 24"
- Säljes AMD Ryzen 5 3400G inkl kylare
- Iphones marknadsandel faller i USA8
- Konsumentverket granskar tio nätbutiker som lurat kunder13
- Airtec Pro Type1 – batteridrivet alternativ till tryckluft på burk46
- Nintendo-innehåll tas bort från Garrys Mod17
- Nu stiger hårddiskpriserna med uppemot 10 procent14
- Quiz: Vad kan du om Inet?68
- Analytiker: Apple har överskattat intresset för Vision Pro50
- Microsoft rullar ut Startmenyreklam till alla59
- EU röstar igenom ”rätten att reparera”53
- Viaplay sätter ner foten mot delade konton55