-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathServer.java
More file actions
205 lines (175 loc) · 6.76 KB
/
Copy pathServer.java
File metadata and controls
205 lines (175 loc) · 6.76 KB
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
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.net.*;
// Server class
class Server {
static ExecutorService exec = null;
private String userName;
public Server()
{
exec = Executors.newFixedThreadPool(10);
exec.submit(() -> this.startTCP());
exec.submit(() -> this.startUDP());
}
public void startTCP() {
ServerSocket server = null;
try {
// server is listening on port 1234
server = new ServerSocket(3333);
server.setReuseAddress(true);
// running infinite loop for getting
// client request
while (true) {
// socket object to receive incoming client
// requests
Socket client = server.accept();
// Displaying that new client is connected
// to server
System.out.println("New client connected at: "
+ client.getInetAddress()
.getHostAddress());
// create a new thread object
ClientHandlerTCP clientSock
= new ClientHandlerTCP(client,userName);
// This thread will handle the client
// separately
new Thread(clientSock).start();
}
}
catch (IOException e) {
e.printStackTrace();
}
finally {
if (server != null) {
try {
server.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
}
public void startUDP() {
new Thread(new Runnable() {
private Random random;
private int id;
@Override
public void run() {
this.random = new Random();
this.id = random.nextInt();
try (DatagramSocket socket = new DatagramSocket(3333)) {
byte[] buf = new byte[socket.getReceiveBufferSize()];
DatagramPacket packet = new DatagramPacket(buf, buf.length);
System.out.println("Listening on UDP port 3333");
socket.receive(packet);
userName = new String(packet.getData(),0, packet.getLength());
System.out.println(userName+" has join the server!");
while (true) {
socket.receive(packet);
System.out.println(userName + ": " + new String(packet.getData(),0, packet.getLength()));
// QOTD Server
InetAddress clientAddress = packet.getAddress();
int clientPort = packet.getPort();
byte[] buffer = ("Hello"+userName+" ".getBytes()).getBytes();
DatagramPacket response = new DatagramPacket(buffer, 0, buffer.length, clientAddress, clientPort);
socket.send(response);
}
} catch (IOException ioe) {
System.err.println("Cannot open the port on UDP");
ioe.printStackTrace();
} finally {
System.out.println("Closing UDP server");
}
}
}).start();
}
// ClientHandler class
static class ClientHandlerTCP implements Runnable {
private Random random;
private int id;
private final Socket clientSocket;
private String userName = "anonymous";
// Constructor
public ClientHandlerTCP(Socket socket,String userName)
{
this.random = new Random();
this.id = random.nextInt();
this.clientSocket = socket;
this.userName = userName;
}
public void run()
{
PrintWriter out = null;
BufferedReader in = null;
try {
// get the outputstream of client
out = new PrintWriter(clientSocket.getOutputStream(), true);
// get the inputstream of client
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
// writing the received message from
// client
System.out.printf(" Sent from client " + userName + ": %s\n", line);
out.println(line);
}
}
catch (IOException e) {
e.printStackTrace();
}
finally {
try {
if (out != null) {
out.close();
}
if (in != null) {
in.close();
clientSocket.close();
}
}
catch (IOException e) {
e.printStackTrace();
}
}
}
}
static class ClientHandlerUDP implements Runnable {
private Random random;
private int id;
private final DatagramSocket serverSocket;
private final DatagramPacket receivePacket;
// Constructor
public ClientHandlerUDP(DatagramSocket socket, DatagramPacket packet) {
this.random = new Random();
this.id = random.nextInt();
this.serverSocket = socket;
this.receivePacket = packet;
}
public void run() {
try {
InetAddress clientAddress = receivePacket.getAddress();
int clientPort = receivePacket.getPort();
byte[] receiveData = receivePacket.getData();
System.out.println("recive dataaa---"+receiveData.toString());
int length = receivePacket.getLength();
// Convert received data to a string
String receivedMessage = new String(receiveData, 0,length);
// Process the received message
System.out.printf("Received from client %d: %s%n", this.id, receivedMessage);
// Send a response back to the client
String responseMessage = receivedMessage.toUpperCase(); // Example: Convert to uppercase
byte[] responseData = responseMessage.getBytes();
DatagramPacket responsePacket = new DatagramPacket(responseData, responseData.length, clientAddress, clientPort);
serverSocket.send(responsePacket);
} catch (IOException e) {
e.printStackTrace();
} finally {
serverSocket.close();
}
}
}
}