Hi Leute, ich hab bei meinem "Chat" grade das Problem, dass ich nur mit einem Client drauf connecten kann. Sobald ich den Client zum 2. Mal starte läuft er, aber er schickt nichts mehr und dann bekomm ich nen Read-Timeout. Hier der Code:
Server:
Client-Threads(behandelt die Verbindungen zu den Clients):
Client:
Bin für jede Hilfe dankbar
Server:
Code:
package chatserver;
import java.io.*;
import java.net.*;
import java.lang.Runnable;
import java.util.Vector;
public class ServerTool implements Runnable{
private Socket sock;
private ServerSocket serversock;
private InputStream input;
private OutputStream output;
private BufferedReader reader;
private PrintWriter writer;
private Thread thr;
private Vector clients;
private int users;
private int port;
public ServerTool() {
System.out.println("Server läuft");
users = 0;
port = 1337;
clients = new Vector();
thr = new Thread(this);
thr.start();
}
public ServerTool(int port) {
System.out.println("Server läuft");
users = 0;
this.port = port;
clients = new Vector();
thr = new Thread(this);
thr.start();
}
public void run(){
while(!thr.isInterrupted()){
try{
serversock = new ServerSocket(port);
sock = serversock.accept();
System.out.println("Neuer Client angemeldet...");
sock.setKeepAlive(true);
sock.setSoTimeout(300);
clients.add(new ClientThreads(sock));
users++;
try{
Thread.sleep(100);
}
catch(InterruptedException e){
e.printStackTrace();
thr.interrupt();
}
}
catch(IOException e){
e.printStackTrace();
thr.interrupt();
}
}
}
public static void main(String[] args){
new ServerTool(1339);
}
}
Client-Threads(behandelt die Verbindungen zu den Clients):
Code:
package chatserver;
import java.io.*;
import java.net.*;
public class ClientThreads extends Thread{
private static int number;
private Socket sock;
private BufferedReader reader;
private PrintWriter writer;
private int fehler_count;
public ClientThreads(Socket sock) {
fehler_count = 0;
number = 0;
this.sock = sock;
this.start();
}
public void run(){
while(!this.isInterrupted()){
try{
writer = new PrintWriter(sock.getOutputStream(),true);
reader = new BufferedReader(
new InputStreamReader(sock.getInputStream()));
String text = reader.readLine();
System.out.println(text);
writer.write("PING\r\n");
writer.flush();
try{
Thread.sleep(100);
}catch(InterruptedException e){
e.printStackTrace();
this.interrupt();
this.destroy();
System.out.println("Client disconnected...");
}
}catch(IOException e){
e.printStackTrace();
this.interrupt();
}
}
}
}
Client:
Code:
package ChatClient;
import java.io.*;
import java.net.*;
import java.lang.Runnable;
import java.lang.Thread;
public class ClientTool implements Runnable{
private Socket sock;
private InputStream input;
private OutputStream output;
private BufferedReader reader;
private PrintWriter writer;
private Thread thr;
public ClientTool(){
System.out.println("Client läuft");
try{
connect("localhost", 1339);
}catch(IOException e){
e.printStackTrace();
}
}
public ClientTool(int port){
System.out.println("Client läuft");
try{
connect("localhost", port);
}catch(IOException e){
e.printStackTrace();
}
}
public void connect(String ip, int port) throws IOException, UnknownHostException{
sock = new Socket(ip, port);
sock.setSoTimeout(10000);
sock.setKeepAlive(true);
thr = new Thread(this);
thr.start();
}
public void run(){
while(!thr.isInterrupted()){
System.out.println("Client Thread läuft...");
try{
writer = new PrintWriter(sock.getOutputStream(),true);
reader = new BufferedReader(
new InputStreamReader(sock.getInputStream()));
writer.write("PING\r\n");
writer.flush();
System.out.println(reader.readLine());
try{
Thread.sleep(100);
}catch(InterruptedException e){
e.printStackTrace();
}
}
catch(IOException e){
e.printStackTrace();
thr.interrupt();
}
if(!sock.isConnected() || !sock.isBound()){
System.out.println("Server nicht verbunden");
thr.interrupt();
}
}
}
public static void main(String[] args){
new ClientTool(1339);
}
}
Bin für jede Hilfe dankbar