शैक्षिक उद्देश्यों के लिए मैंने एक सर्वर और क्लाइंट बनाने की कोशिश की जहां सर्वर एकाधिक क्लाइंट से डेटा प्राप्त करता है और प्रत्येक संदेश को इको करता है। समस्या यह है कि जब मैं सर्वर को सभी ग्राहकों को एक बार में गूंज भेजता हूं।प्रकार का कोई संलग्न उदाहरण ... सुलभ है
public class SocketServer {
ArrayList<MyRunnable> ts = new ArrayList<MyRunnable>();
ServerSocket serv;
static MainServerThread mst = new MainServerThread();
// ^IDE(eclipse) underlines this as the problem
SocketServer() {
EventQueue.invokeLater(mst);
}
public static void main(String[] args) {
Thread tr = new Thread(mst);
tr.start();
}
void send(String s) {
for (int i = 0; i < ts.size(); i++) {
MyRunnable tmp = ts.get(i);
tmp.sendToClient(s);
}
}
class MainServerThread implements Runnable {
public void run() {
try {
serv = new ServerSocket(13131);
boolean done = false;
while (!done) {
Socket s = serv.accept();
MyRunnable r = new MyRunnable(s);
Thread t = new Thread(r);
ts.add(r);
t.start();
}
} catch(Exception e) {
e.printStackTrace();
}
}
}
class MyRunnable implements Runnable {
Socket sock;
PrintWriter out;
Scanner in;
MyRunnable(Socket soc) {
sock = soc;
}
public void run() {
try {
try {
out = new PrintWriter(sock.getOutputStream(), true);
in = new Scanner(sock.getInputStream());
boolean done = false;
while (!done) {
String line = in.nextLine();
send("Echo: " + line);
System.out.println("Echo: " + line);
if (line.trim().equals("BYE")) done = true;
}
} finally {
sock.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void sendToClient(String s) {
out.println(s);
}
}
}
मैंने कई समान प्रश्नों की खोज की है और जवाब दिया है, लेकिन उनमें से कोई भी मेरी मदद नहीं करता है। आशा है कि आप मेरी गलती को इंगित कर सकते हैं। अग्रिम में धन्यवाद।
की संभावित डुप्लिकेट - (http://stackoverflow.com/questions/9560600/java-no-enclosing-instance-of-type-foo-is-accessible) – Raedwald