-
Notifications
You must be signed in to change notification settings - Fork 1
/
Client.java
181 lines (140 loc) · 3.93 KB
/
Client.java
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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
public class Client {
private Socket socket;
private String nickname = "Gast";
private String vorname = "John";
private String nachname = "Doe";
private String email = "-";
private Thread messageListenerThread = null;
PrintWriter writer = null;
private List<Client> ignoreList;
/**
* Der MessageListener lŠuft in einem sepparaten Thread. Er prŸft rund um
* die Uhr, ob der Server Nachrichten schickt. Die Nachrichten gibt er
* Anschlie§end in der Konsole aus.
*/
private class MessageListener implements Runnable {
@Override
public void run() {
BufferedReader bufferedReader = null; // Nachrichten vom Server lesen
try {
bufferedReader = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
// horchen, ob Server Nachrichten sendet
String message = "";
while ((message = bufferedReader.readLine()) != null) {
// Nachricht auf der Client Konsole ausgeben
System.out.println(message);
// dem Server meine privaten Informationen zusenden
if (message.equals("send_infos_to_server")) {
System.out.println("Sende Server meine infos: " + nickname);
writer.println(nickname);
writer.println(vorname);
writer.println(nachname);
writer.println(email);
}
}
} catch (IOException e) {
System.out
.println("Problem beim Empfang einer Server Nachricht: "
+ e.getMessage());
}
// Verbindungen schlie§en
finally {
try {
// sicherstellen, dass Socket auch wirklich geschlossen ist
if (socket != null) {
socket.close();
}
bufferedReader.close();
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
}
}
public Client(String nick, String vname, String nname, String email) {
this.nickname = nick;
this.vorname = vname;
this.nachname = nname;
this.email = email;
this.ignoreList = new ArrayList<Client>();
}
public void connect(String hostname, int port) {
BufferedReader bufferedReader = null;
try {
// mit dem server verbinden
socket = new Socket(hostname, port);
writer = new PrintWriter(socket.getOutputStream(), true);
// MessageListener als neuen Thread starten
messageListenerThread = new Thread(new MessageListener());
messageListenerThread.start();
// Reader zum eingeben von Nachrichten
bufferedReader = new BufferedReader(
new InputStreamReader(System.in));
// Nachrichten an den Server senden
String message = "";
while ((message = bufferedReader.readLine()) != null) {
writer.println(message);
// Subthreads stoppen, damit Prozess terminiert
if (message.equals("disconnect")) {
messageListenerThread.interrupt();
break;
}
}
} catch (IOException e) {
System.out.println(e.getMessage());
}
// Verbindungen schlie§en
finally {
try {
// sicherstellen, dass Socket auch wirklich geschlossen ist
if (socket != null)
socket.close();
writer.close();
bufferedReader.close();
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public String getVorname() {
return vorname;
}
public void setVorname(String vorname) {
this.vorname = vorname;
}
public String getNachname() {
return nachname;
}
public void setNachname(String nachname) {
this.nachname = nachname;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Socket getSocket() {
return socket;
}
public void setSocket(Socket socket) {
this.socket = socket;
}
public List<Client> getIgnoreList() {
return ignoreList;
}
}