25.10.2015, 17:59 |
Auf diesen Beitrag antworten » |
neuling96 |
Client uns Sever
Ich muss für das Spiel Pingpong eine Chatfunktion einbauen, zudem soll es möglich sein, dass es einen Main spieler gibt, der das spiel spielt , während andere Zuschauen .
Sollte man hier für TCP oder UDP verwenden? |
25.10.2015, 19:06 |
Auf diesen Beitrag antworten » |
Karlito |
Das kommt drauf an. TCP gibt Rückmeldung darüber, ob ein Paket angekommen ist, UDP nicht. Beim Spiel selbst will man wissen, ob alles angekommen ist. Beim Chat und beim Zuschauen kann man sich darüber streiten.
Gruß,
Karlito |
25.10.2015, 19:07 |
Auf diesen Beitrag antworten » |
eulerscheZahl |
Für den Chat würde ich TCP verwenden, da so Übertragungsfehler verhindert werden.
Beim Spiel selbst geht es aber auch darum, möglichst geringe Verzögerungen zu haben. UDP arbeitet ohne Empfangsbestätigung und ist daher für zeitkritische Dinge (z.B. Videostreaming) besser geeignet.
edit: 2 Leute, 2 Antworten, viel Spaß
|
25.10.2015, 22:10 |
Auf diesen Beitrag antworten » |
neuling96 |
erster Vorschlag das aber nicht geht
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
|
mport java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import model.Snake;
public class MultithreadedServer {
static ArrayList<ObjectOutputStream> client = new ArrayList<>();
private static int port=9004;
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(port);
while (true) {
Socket sock = server.accept();
new Thread(new AntwortProzess(sock)).start();
}
}
/**
* Erzeuge einen Server
* @param port Listen-Port
*/
private MultithreadedServer(int port) {
this.port = port;
}
private static void sendMessage(String nachricht) {
}
private static class AntwortProzess extends Thread {
private final Socket socket;
public AntwortProzess(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
//Diese Methode wird vom Thread gerufen, wenn er startet.
try (Socket socket = this.socket) {
ObjectInputStream in = new ObjectInputStream(socket.getInputStream());
ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());
System.out.print("true");
client.add(out);
while (true){
Snake line;
try {
line = (Snake) in.readObject();
if(line !=null){
for (int i=1; i<client.size();i++){
try{
client.get(i).writeObject(line);
//System.out.print(line);
client.get(i).flush();
}catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
} catch (ClassNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
//Schreibe eine Zeile Text an den Client zurück.
} catch (IOException ex) {
System.out.println(ex);
}
}
}
}
|
|
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
|
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.SocketException;
import java.net.UnknownHostException;
import javafx.application.Platform;
import javafx.scene.control.TextField;
public class ChatClient extends Thread {
//TextField nachricht;
ObjectInputStream in;
ObjectOutputStream out;
@Override
public void run() {
try (Socket verbindung = new Socket("localhost", 9004)) {
// this.chat.getButton().setText("w");
//Öffne einen InputStream
in = new ObjectInputStream(verbindung.getInputStream());
out = new ObjectOutputStream(verbindung.getOutputStream());
System.out.print("true");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main (String [] args) {
ChatClient k = new ChatClient ();
k.start();
}
}
|
|
Das ist Problem ist dass
System.out.print("true"); im Clienten nicht ausgeführt wird, aber ich verstehe ich nicht wieso |