-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathServer.java
More file actions
137 lines (127 loc) · 3.31 KB
/
Server.java
File metadata and controls
137 lines (127 loc) · 3.31 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
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Server extends JFrame{
private JTextField userText;
private JTextArea chatWindow;
private ObjectOutputStream output;
private ObjectInputStream input;
private ServerSocket server;
private Socket connection;
public Server(){
super("TUX Messenger");
userText = new JTextField();
userText.setEditable(false);
//chatWindow.setEditable(false);
userText.addActionListener(
new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
sendMessage(event.getActionCommand());
userText.setText("");
}
}
);
add(userText,BorderLayout.NORTH);
chatWindow =new JTextArea();
add(new JScrollPane(chatWindow));
setSize(500,350);
setVisible(true);
} //set up and run the server
public void startRunning(){
try{
server = new ServerSocket(6789,100);//port,no_of_users
while(true)
{
try{
//connect and start conversation
waitForConnection();
setupStreams();
whileChatting();
}catch(EOFException eofException)
{
showMessage("\nUser ended the connection\n");
}finally{
closeProg();
}
}
}catch(IOException ioException)
{
ioException.printStackTrace();
}
}
//wait for connection and print message
private void waitForConnection() throws IOException {
showMessage("\nWaiting for someone to connect...\n");
connection=server.accept();
showMessage("\nConnected to "+connection.getInetAddress().getHostName());
}
//get streams for i/o
private void setupStreams() throws IOException{
output=new ObjectOutputStream(connection.getOutputStream());
output.flush();
input=new ObjectInputStream(connection.getInputStream());
showMessage("\n streams are set up");
}
//during chatting
private void whileChatting() throws IOException{
String message= "You are now connected";
sendMessage(message);
ableToType(true);
do{
try{
message=(String)input.readObject();//read string from input stream
showMessage("\n"+message);
}catch(ClassNotFoundException classNotFoundException){
showMessage("\n Unknown type of message send by user");
}
}while(!message.equals("CLIENT - END"));
}
//close streams and sockets after chatting
private void closeProg(){
showMessage("\n Closing the connection");
ableToType(false);
try{
input.close();
output.close();
connection.close();
}catch(IOException ioException){
ioException.printStackTrace();
}
}
//send message method
private void sendMessage(String message)
{
try{
output.writeObject("SERVER - "+message);//write to output stream after concatenating with server word
output.flush();//always flush the output bites
showMessage("\nSERVER - "+message);//showing it in my own window
}catch(IOException ioException){
chatWindow.append("\nError,I can't send this message\n");
}
}
//update chat window
private void showMessage(final String text){
//update whole GUI by changing chat window by a thread
SwingUtilities.invokeLater(
new Runnable(){
public void run(){
chatWindow.append(text);
}
}
);
}
//letting the user type the message
private void ableToType(final boolean tof){
SwingUtilities.invokeLater(//thread
new Runnable(){
public void run(){
userText.setEditable(tof);;
}
}
);
}
}