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
- Igår Corsair Platform 6: För dig som inte nöjer dig med Ikea-skrivbord 11
- Igår Rykte: Switch 2 släpps i höst – OLED-variant dröjer 32
- Igår Iphones marknadsandel faller i USA 43
- 25 / 4 Airtec Pro Type1 – batteridrivet alternativ till tryckluft på burk 80
- 25 / 4 Nu stiger hårddiskpriserna med uppemot 10 procent 23
Mjukvara
Datorkomponenter
Ljud, bild och kommunikation
- Övergivet skadeprogram infekterar miljontals maskiner0
- Helgsnack: Är all reklam till ondo?37
- Akira har tjänat en halv miljard kronor på ransomware-attacker19
- Escape from Tarkov385
- Premiär! Månadens Drop på SweClockers69
- Elbilar - Tråden för intresserade23192
- Var köper man schyssta skjortor för en normal manskropp?1
- Kan man/vågar man använda en gammal CPU vattenkylare?2
- USB-C Hubb med on/off knappar?4
- ASUS P2B-D, första start på många år11
- Säljes Speldator 4080
- Säljes Dell 27" S2721DGFA IPS QHD 165 Hz HDR 2560 x 1440
- Säljes Custom Loop - i9-9900K / 32 GB / 2 TB / RTX 3080 / Win 11
- Skänkes Gitarr Epiphone TC10
- Säljes Gamingdator Ryzen 5600X och RTX 3070
- Köpes Uppgraderingspaket AM4 sökes, även grafikkort.
- Köpes Letar delar till databygge
- Säljes Äldre speldator
- Köpes HDFury AVR Key
- Säljes 16GB 3600Mhz CL15 Trident Z DDR4
- Övergivet skadeprogram infekterar miljontals maskiner0
- Helgsnack: Är all reklam till ondo?37
- Microsoft släpper källkoden till MS‑DOS 4.0010
- Ny caps lock-symbol i Windows förbryllar HP-användare20
- Corsair Platform 6: För dig som inte nöjer dig med Ikea-skrivbord11
- Rykte: Switch 2 släpps i höst – OLED-variant dröjer32
- NetonNet varnar om läckta kunduppgifter22
- Premiär på SweClockers! Månadens drop med gamingskärm hos Elgiganten69
- IT-bolag: Teknikstrul är största tidsboven idag42
- Därför blockerar Windows 11 24H2 Start‑menyhack41