Hallo Leute,
ich sitze an einer Aufgabe für die Uni - es geht um einen SocketServer und einen Client.
Der Client soll nach Verbindung Bestellungen aufgeben können (4 stellige Zahl) und an den Server schicken.
Der Server soll die Zahl prüfen und einen entsprechenden Code zurückgeben.
Leider scheint meine Zahl nicht an den Server geschickt zu werden - ich finde leider das Problem nicht - vielleicht wäre einer von euch so freundlich und schaut drüber, ob er die Problemstelle ausfindig macht.
Client:
Server:
Vielen Dank für die Hilfe und ein schönes Wochenende noch,
Tim
ich sitze an einer Aufgabe für die Uni - es geht um einen SocketServer und einen Client.
Der Client soll nach Verbindung Bestellungen aufgeben können (4 stellige Zahl) und an den Server schicken.
Der Server soll die Zahl prüfen und einen entsprechenden Code zurückgeben.
Leider scheint meine Zahl nicht an den Server geschickt zu werden - ich finde leider das Problem nicht - vielleicht wäre einer von euch so freundlich und schaut drüber, ob er die Problemstelle ausfindig macht.
Client:
Java:
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
public class Client {
Socket requestSocket;
InputStreamReader isr;
BufferedReader br;
BufferedOutputStream bos;
int port = 4444;
String ip;
String order;
public Client(String ip) {
this.ip = ip;
}
public void run() {
System.out.println("New client created");
try {
requestSocket = new Socket(ip, port);
bos = new BufferedOutputStream(requestSocket.getOutputStream());
isr = new InputStreamReader(requestSocket.getInputStream(), "UTF-8");
br = new BufferedReader(isr);
while (true) {
String line = null;
while ((line = br.readLine()) != null) {
handleMessage(line);
}
if (line == null) {
System.out.println("Disconnected..");
break;
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
bos.close();
isr.close();
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
Client c = new Client("localhost");
c.run();
}
private void getOrderFromUser() {
BufferedReader bin = new BufferedReader(
new InputStreamReader(System.in));
System.out.print("Please input the order's number: ");
try {
order = bin.readLine();
bos.write(order.getBytes());
bos.flush();
System.out.println("Order sent to Server");
} catch (IOException e) {
e.printStackTrace();
}
}
private void handleMessage(String line) {
if (line.equals("Connection established")) {
System.out.println(line);
this.getOrderFromUser();
}
if (line.equals("444")) {
System.out.println("Order accepted");
} else if (line.equals("450")) {
System.out.println("Order declined");
} else if (line.equals("511")) {
System.out.println("Damn my IP got banned :(");
}
}
}
Server:
Java:
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
public class Server {
public static boolean isReady = false;
int port;
ServerSocket server;
Socket client;
byte[] receivedData;
BufferedOutputStream bos;
InputStream is;
BufferedReader br;
String line;
final String DECLINED = "511";
final String FAIL = "450";
final String OK = "444";
int failcount = 0;
ArrayList<InetAddress> bannedClients;
InetAddress currentClientIP;
public String getRemoteAddress() {
return server.getInetAddress() + "";
}
public static void main(String[] args) throws IOException {
new Server().startServer();
}
public Server() throws IOException {
bannedClients = new ArrayList<InetAddress>();
server = new ServerSocket(4444);
System.out.println("New server created with port 4444");
}
public void startServer() {
while (true) {
client = null;
try {
client = server.accept();
if (client != null) {
System.out.println("New client connected");
handleConnection(client);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (client != null)
try {
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
private void handleConnection(Socket client) throws IOException {
System.out.println("handle Connection");
bos = new BufferedOutputStream(client.getOutputStream());
bos.write("Connection established".getBytes("UTF-8"));
br = new BufferedReader(new InputStreamReader(client.getInputStream(),
"UTF-8"));
while ((line = br.readLine()) != null) {
System.out.println("Order: " + line);
if (bannedClients.contains(currentClientIP)) {
bos.write(DECLINED.getBytes("UTF-8"));
} else {
if (handleMessageFromClient(line)) {
bos.write(OK.getBytes("UTF-8"));
} else {
failcount++;
if (failcount < 3) {
bos.write(FAIL.getBytes("UTF-8"));
System.out.println("Wrong Order from Client");
} else if (failcount == 3) {
System.out
.println("3 wrong Orders from Client - will bann him");
bos.write(DECLINED.getBytes("UTF-8"));
bannedClients.add(currentClientIP);
failcount = 0;
}
}
}
}
}
protected boolean handleMessageFromClient(String line) {
if (line.length() == 4) {
try {
Integer.parseInt(line);
} catch (NumberFormatException e) {
System.out.println("No regular number");
return false;
}
return true;
} else {
return false;
}
}
}
Vielen Dank für die Hilfe und ein schönes Wochenende noch,
Tim
Zuletzt bearbeitet: