24.3 |
Distinguish between connection-oriented and connectionless network services.
|
24.4 |
How does a client determine the host name of the client computer?
|
24.5 |
Under what circumstances would a SocketException be thrown?
|
24.6 |
How can a client get a line of text from a server?
|
24.7 |
Describe how a client connects to a server.
|
24.8 |
Describe how a server sends data to a client.
|
24.9 |
Describe how to prepare a server to receive a stream-based connection request from a single client.
|
24.10 |
How does a server listen for streams-based socket connections at a port?
|
24.11 |
What determines how many connect requests from clients can wait in a queue to connect to a server?
|
24.12 |
As described in the text, what reasons might cause a server to refuse a connection request from a client?
|
24.13 |
Use a socket connection to allow a client to specify a file name and have the server send the contents of the file or indicate that the file does not exist.
|
|
|
24.14 |
Modify Exercise 24.13 to allow the client to modify the contents of the file and send the file back to the server for storage. The user can edit the file in a JTextArea, then click a save changes button to send the file back to the server.
|
24.15 |
Modify the program in Fig. 24.2 to allow users to add their own sites to the list and remove sites from the list.
|
24.16 |
Multithreaded servers are quite popular today, especially because of the increasing use of multiprocessing servers. Modify the simple server application presented in Section 24.6 to be a multithreaded server. Then use several client applications and have each of them connect to the server simultaneously. Use an ArrayList to store the client threads. ArrayList provides several methods of use in this exercise. Method size determines the number of elements in an ArrayList. Method get returns the element in the location specified by its argument. Method add places its argument at the end of the ArrayList. Method remove deletes its argument from the ArrayList.
|
24.17 |
(Checkers Game) In the text, we presented a Tic-Tac-Toe program controlled by a multithreaded server. Develop a checkers program modeled after the Tic-Tac-Toe program. The two users should alternate making moves. Your program should mediate the players' moves, determining whose turn it is and allowing only valid moves. The players themselves will determine when the game is over.
|
24.18 |
(Chess Game) Develop a chess-playing program modeled after the checkers program in the Exercise 24.17.
|
24.19 |
(Blackjack Game) Develop a blackjack card game program in which the server application deals cards to each of the client applets. The server should deal additional cards (as per the rules of the game) to each player as requested.
|
24.20 |
(Poker Game) Develop a poker card game in which the server application deals cards to each of the client applets. The server should deal additional cards (as per the rules of the game) to each player as requested.
|
24.21 |
(Modifications to the Multithreaded Tic-Tac-Toe Program) The programs in Fig. 24.13 and Fig. 24.15 implemented a multithreaded, client/server version of the game of Tic-Tac-Toe. Our goal in developing this game was to demonstrate a multithreaded server that could process multiple connections from clients at the same time. The server in the example is really a mediator between the two client appletsit makes sure that each move is valid and that each client moves in the proper order. The server does not determine who won or lost or whether there was a draw. Also, there is no capability to allow a new game to be played or to terminate an existing game.
The following is a list of suggested modifications to Fig. 24.13 and Fig. 24.15:
- Modify the TicTacToeServer class to test for a win, loss or draw on each move in the game. Send a message to each client applet that indicates the result of the game when the game is over.
- Modify the TicTacToeClient class to display a button that when clicked allows the client to play another game. The button should be enabled only when a game completes. Note that both class TicTacToeClient and class TicTacToeServer must be modified to reset the board and all state information. Also, the other TicTacToeClient should be notified that a new game is about to begin so that its board and state can be reset.
- Modify the TicTacToeClient class to provide a button that allows a client to terminate the programat any time. When the user clicks the button, the server and the other client should be notified. The server should then wait for a connection from another client so that a new game can begin.
- Modify the TicTacToeClient class and the TicTacToeServer class so that the winner of a game can choose game piece X or O for the next game. Remember: X always goes first.
- If you would like to be ambitious, allow a client to play against the server while the server waits for a connection from another client.
|
24.22 |
(3-D Multithreaded Tic-Tac-Toe) Modify the multithreaded, client/server Tic-Tac-Toe program to implement a three-dimensional 4-by-4-by-4 version of the game. Implement the server application to mediate between the two clients. Display the three-dimensional board as four boards containing four rows and four columns each. If you would like to be ambitious, try the following modifications:
- Draw the board in a three-dimensional manner.
- Allow the server to test for a win, loss or draw. Beware! There are many possible ways to win on a 4-by-4-by-4 board!
|
24.23 |
(Networked Morse Code) Perhaps the most famous of all coding schemes is the Morse code, developed by Samuel Morse in 1832 for use with the telegraph system. The Morse code assigns a series of dots and dashes to each letter of the alphabet, each digit, and a few special characters (e.g., period, comma, colon and semicolon). In sound-oriented systems, the dot represents a short sound and the dash represents a long sound. Other representations of dots and dashes are used with light-oriented systems and signal-flag systems. Separation between words is indicated by a space or, simply, the absence of a dot or dash. In a sound-oriented system, a space is indicated by a short time during which no sound is transmitted. The international version of the Morse code appears in Fig. 24.30.
Figure 24.30. The letters of the alphabet as expressed in international Morse code.
Character
|
Code
|
Character
|
Code
|
A
|
.-
|
T
|
-
|
B
|
-...
|
U
|
..-
|
C
|
-.-.
|
V
|
...-
|
D
|
-..
|
W
|
.--
|
E
|
.
|
X
|
-..-
|
F
|
..-.
|
Y
|
-.--
|
G
|
--.
|
Z
|
--..
|
H
|
....
|
|
|
I
|
..
|
Digits
|
|
J
|
.---
|
1
|
.----
|
K
|
-.-
|
2
|
..---
|
L
|
.-..
|
3
|
...--
|
M
|
--
|
4
|
....-
|
N
|
-.
|
5
|
.....
|
O
|
---
|
6
|
-....
|
P
|
.--.
|
7
|
--...
|
Q
|
--.-
|
8
|
---..
|
R
|
.-.
|
9
|
----.
|
S
|
...
|
0
|
-----
|
Write a client/server application in which two clients can send Morse code messages to each other through a multithreaded server application. The client application should allow the user to type English-language phrases in a JTextArea. When the user sends the message, the client application encodes the text into Morse code and sends the coded message through the server to the other client. Use one blank between each Morse-coded letter and three blanks between each Morse-coded word. When messages are received, they should be decoded and displayed as normal characters and as Morse code. The client should have one JTextField for typing and one JTextArea for displaying the other client's messages.
|