-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathServer.java
executable file
·136 lines (128 loc) · 3.9 KB
/
Server.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
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Server extends JFrame
{
private JTextField userText; // input text
private JTextArea chatWindow;
private ObjectOutputStream output;
private ObjectInputStream input;
private ServerSocket server;
private Socket connection;
// constructor
public Server()
{
super("Spivotron's IM");
userText = new JTextField();
userText.setEditable(false);
userText.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent event){
sendMessage(event.getActionCommand());
userText.setText(""); // reset userText to blank string
}
}
);
add(userText, BorderLayout.NORTH);
chatWindow = new JTextArea();
add(new JScrollPane(chatWindow));
setSize(300, 150);
setVisible(true);
}
// set up and run the server
public void startRunning()
{
try{
server = new ServerSocket(6789, 100); // port number and maximum number of people that can connect
while(true){
try{
// connect and have a connection
waitForConnection();
setupStreams();
whileChatting();
}catch(EOFException eofException){ // program ends and connection stops
showMessage("\n Server ended the connection!");
}finally{
closeCrap();
}
}
}catch(IOException ioException){
ioException.printStackTrace();
}
}
// wait for connection, then display connetion information
private void waitForConnection() throws IOException{
showMessage("Waiting for someone to connect...\n");
connection = server.accept(); // creates a Socket when the users connect
showMessage(" Now connected to "+connection.getInetAddress().getHostName());
}
// get stream to send and receive data
private void setupStreams() throws IOException
{
output = new ObjectOutputStream(connection.getOutputStream());
output.flush(); // cleans out leftover data
input = new ObjectInputStream(connection.getInputStream());
showMessage("\n Streams are not setup! \n");
}
// during the chat conversation
private void whileChatting() throws IOException{
String message = "You are now connected!";
sendMessage(message);
ableToType(true);
do {
// have a conversation
try{
message = (String) input.readObject(); // view sent data as object
showMessage("\n"+message);
}catch(ClassNotFoundException classNotFoundException){
showMessage("\n Unknown data type");
}
} while (!message.equals("CLIENT - END"));
}
// close streams and sockets
private void closeCrap(){
showMessage("\nClosing connection...\n");
ableToType(false);
try{
output.close();
input.close();
connection.close();
}catch(IOException ioException){
ioException.printStackTrace();
}
}
// send a message to a client
private void sendMessage(String message)
{
try{
output.writeObject("SERVER - " + message);
output.flush();
showMessage("\nSERVER - "+message);
}catch(IOException ioException){
chatWindow.append("\n ERROR. CANNOT SEND MESSAGE");
}
}
// updates chatWindow
private void showMessage(final String text)
{
SwingUtilities.invokeLater(
new Runnable(){
public void run(){
chatWindow.append(text);
}
}
);
}
// let the user type stuff into their box
private void ableToType(final boolean tof){
SwingUtilities.invokeLater(
new Runnable(){
public void run(){
userText.setEditable(tof);
}
}
);
}
}