noreux
28-06-2005, 22:36
Hallo,
Habe mir nen kleinen Serversocket gemacht, der bisher auch funktioniert hat. Jetzt wollte ich aber dass sich mehrere clients gleichzeitig einloggen können, darum habe ich für den Client nen extra Thread gemacht. Es wird also folgender Code aufgerufen: (tcpserver.java)
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class tcpserver extends Thread{
public tcpserver() {
}
public void run() {
ServerSocket sock = null; // original server socket
Socket clientSocket = null; // socket created by accept
PrintWriter pw = null; // socket output stream
BufferedReader br = null; // socket input stream
try {
sock = new ServerSocket(5555); // create socket and bind to port
System.out.println("waiting for client to connect");
while (true){
clientSocket = sock.accept(); // wait for client to connect
new ClientThread(clientSocket);
}
sock.close();
} catch (Throwable e) {
// ^-------^ sowas ist absolut schlimm...
System.out.println("Error " + e.getMessage());
e.printStackTrace();
}
}
}
und in einen extra Thread die ClientThread.java:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
class ClientThread extends Thread {
private Socket clientSocket;
public ClientThread(final Socket clientSocket)
{
this.clientSocket = clientSocket;
}
public void run()
{
System.out.println("client has connected");
PrintWriter pw = new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader br = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
pw.println("Hallo");
String g = br.readLine();
if (g.equals("1")) {
pw.println("Du hast 1 gedrückt");
}
if (g.equals("2")) {
pw.println("Du hast 2 gedrückt");
}
pw.close();
br.close();
clientSocket.close();
System.out.println("closed");
sock.close();
}
}
Ich kann es aber nicht compilieren, weil er in der tcpserver.java die Zeile mit "sock.close();" als Fehler anstreicht (unreachable code) und in der ClientThread nur das "sock" von "sock.close();" anstreicht (sock cannot be resolved). Weiß jemand vielleicht was ich an dem code falsch gemacht habe, bzw was man ändern muss dammit er so läuft wie er soll? wäre dankbar für alle tipps,
gruß
noreux
Habe mir nen kleinen Serversocket gemacht, der bisher auch funktioniert hat. Jetzt wollte ich aber dass sich mehrere clients gleichzeitig einloggen können, darum habe ich für den Client nen extra Thread gemacht. Es wird also folgender Code aufgerufen: (tcpserver.java)
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class tcpserver extends Thread{
public tcpserver() {
}
public void run() {
ServerSocket sock = null; // original server socket
Socket clientSocket = null; // socket created by accept
PrintWriter pw = null; // socket output stream
BufferedReader br = null; // socket input stream
try {
sock = new ServerSocket(5555); // create socket and bind to port
System.out.println("waiting for client to connect");
while (true){
clientSocket = sock.accept(); // wait for client to connect
new ClientThread(clientSocket);
}
sock.close();
} catch (Throwable e) {
// ^-------^ sowas ist absolut schlimm...
System.out.println("Error " + e.getMessage());
e.printStackTrace();
}
}
}
und in einen extra Thread die ClientThread.java:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
class ClientThread extends Thread {
private Socket clientSocket;
public ClientThread(final Socket clientSocket)
{
this.clientSocket = clientSocket;
}
public void run()
{
System.out.println("client has connected");
PrintWriter pw = new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader br = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
pw.println("Hallo");
String g = br.readLine();
if (g.equals("1")) {
pw.println("Du hast 1 gedrückt");
}
if (g.equals("2")) {
pw.println("Du hast 2 gedrückt");
}
pw.close();
br.close();
clientSocket.close();
System.out.println("closed");
sock.close();
}
}
Ich kann es aber nicht compilieren, weil er in der tcpserver.java die Zeile mit "sock.close();" als Fehler anstreicht (unreachable code) und in der ClientThread nur das "sock" von "sock.close();" anstreicht (sock cannot be resolved). Weiß jemand vielleicht was ich an dem code falsch gemacht habe, bzw was man ändern muss dammit er so läuft wie er soll? wäre dankbar für alle tipps,
gruß
noreux