Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit54c8f44

Browse files
author
jsquared21
committed
Add Ex31.06
1 parentebfad91 commit54c8f44

9 files changed

+423
-0
lines changed
Binary file not shown.
Lines changed: 214 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,214 @@
1+
importjava.io.*;
2+
importjava.net.*;
3+
importjava.util.Date;
4+
importjavafx.application.Application;
5+
importjavafx.event.ActionEvent;
6+
importjavafx.event.EventHandler;
7+
importjavafx.scene.Scene;
8+
importjavafx.scene.control.TextField;
9+
importjavafx.scene.control.Label;
10+
importjavafx.scene.control.Button;
11+
importjavafx.scene.layout.GridPane;
12+
importjavafx.scene.layout.HBox;
13+
importjavafx.geometry.Pos;
14+
importjavafx.stage.Stage;
15+
16+
publicclassExercise31_06ClientextendsApplication {
17+
// IO Streams
18+
ObjectOutputStreamobjectToServer =null;
19+
ObjectInputStreamobjectFromServer =null;
20+
DataInputStreamdataFromServer =null;
21+
DataOutputStreamdataToServer =null;
22+
23+
// Text fields for address information
24+
privateTextFieldtfName =newTextField();
25+
privateTextFieldtfStreet =newTextField();
26+
privateTextFieldtfCity =newTextField();
27+
privateTextFieldtfState =newTextField();
28+
privateTextFieldtfZip =newTextField();
29+
30+
// Buttons for navigating address information
31+
privateButtonbtAdd =newButton("Add");
32+
privateButtonbtFirst =newButton("First");
33+
privateButtonbtNext =newButton("Next");
34+
privateButtonbtPrevious =newButton("Previous");
35+
privateButtonbtLast =newButton("Last");
36+
37+
// Host name or ip
38+
Stringhost ="localhost";
39+
40+
// Address index
41+
intindex = -1;
42+
43+
// Number of Addresses stored
44+
intsize =0;
45+
46+
@Override// Override the start method in the Application class
47+
publicvoidstart(StageprimaryStage) {
48+
GridPanepane =newGridPane();
49+
pane.add(newLabel("Name"),0,0);
50+
pane.add(tfName,1,0);
51+
pane.add(newLabel("Street"),0,1);
52+
pane.add(tfStreet,1,1);
53+
pane.add(newLabel("City"),0,2);
54+
55+
// Hbox to store city, state and zip info
56+
HBoxhBox =newHBox(5);
57+
pane.add(hBox,1,2);
58+
hBox.getChildren().addAll(tfCity,newLabel("State"),
59+
tfState,newLabel("Zip"),tfZip);
60+
61+
// Hbox to hold buttons
62+
HBoxpaneForButtons =newHBox(5);
63+
paneForButtons.getChildren().addAll(btAdd,btFirst,btNext,btPrevious,btLast);
64+
pane.add(paneForButtons,1,3);
65+
pane.setHgap(5);
66+
pane.setVgap(5);
67+
68+
pane.setAlignment(Pos.CENTER);
69+
tfName.setPrefColumnCount(15);
70+
tfState.setPrefColumnCount(15);
71+
tfCity.setPrefColumnCount(10);
72+
tfState.setPrefColumnCount(2);
73+
tfZip.setPrefColumnCount(3);
74+
75+
// Register handlers
76+
btAdd.setOnAction(e ->addAddress());
77+
btFirst.setOnAction(e ->getFirst());
78+
btNext.setOnAction(e ->getNext());
79+
btPrevious.setOnAction(e ->getPrevious());
80+
btLast.setOnAction(e ->getLast());
81+
82+
// Create a scene and place it in the stage
83+
Scenescene =newScene(pane,375,130);
84+
primaryStage.setTitle("Exercise31_06");// Set the stage title
85+
primaryStage.setScene(scene);// Place the scene in the stage
86+
primaryStage.show();// Display the stage
87+
88+
}
89+
90+
/** Add an address */
91+
privatevoidaddAddress() {
92+
try {
93+
// Connect to the server
94+
Socketsocket =newSocket(host,8000);
95+
96+
// Create an output stream
97+
dataToServer =newDataOutputStream(socket.getOutputStream());
98+
99+
// Send a string command to the server
100+
dataToServer.writeUTF("ADD_STUDENT");
101+
dataToServer.flush();
102+
103+
// Get text field
104+
Stringname =tfName.getText().trim();
105+
Stringstreet =tfStreet.getText().trim();
106+
Stringcity =tfCity.getText().trim();
107+
Stringstate =tfState.getText().trim();
108+
Stringzip =tfZip.getText().trim();
109+
110+
// Create a Student object and send to the server
111+
objectToServer =newObjectOutputStream(socket.getOutputStream());
112+
StudentAddresss =
113+
newStudentAddress(name,street,city,state,zip);
114+
objectToServer.writeObject(s);
115+
116+
// Create an input stream
117+
dataFromServer =newDataInputStream(socket.getInputStream());
118+
index =dataFromServer.readInt();// Get this address index
119+
size =dataFromServer.readInt();// Get number of addresses stored
120+
System.out.println("Address index: " +index);
121+
}
122+
catch (IOExceptionex) {
123+
ex.printStackTrace();
124+
}
125+
}
126+
127+
/** Display the first address */
128+
privatevoidgetFirst() {
129+
getAddress(0);
130+
}
131+
132+
/** Display the next address */
133+
privatevoidgetNext() {
134+
getAddress(index +1);
135+
}
136+
137+
/** Display the previous address */
138+
privatevoidgetPrevious() {
139+
getAddress(index -1);
140+
}
141+
142+
/** Request and Display an object from the server */
143+
privatevoidgetAddress(inti) {
144+
try {
145+
// Connect to socket
146+
Socketsocket =newSocket(host,8000);
147+
148+
// Send data to server
149+
dataToServer =newDataOutputStream(socket.getOutputStream());
150+
dataToServer.writeUTF("GET_INDEX");
151+
dataToServer.writeInt(i);
152+
System.out.println("Get index: " +i);
153+
dataToServer.flush();
154+
155+
// Recieve object from server
156+
objectFromServer =newObjectInputStream(socket.getInputStream());
157+
StudentAddresss = (StudentAddress)objectFromServer.readObject();
158+
159+
setTextFields(s);
160+
161+
// Recieve data from server
162+
dataFromServer =newDataInputStream(socket.getInputStream());
163+
index =dataFromServer.readInt();// Get this address index
164+
size =dataFromServer.readInt();// Get the number of addresses stored
165+
System.out.println("Address index: " +index);
166+
}
167+
catch (ClassNotFoundExceptionex) {
168+
ex.printStackTrace();
169+
}
170+
catch(IOExceptionex) {
171+
ex.printStackTrace();
172+
}
173+
}
174+
175+
/** Display the Last address */
176+
privatevoidgetLast() {
177+
try {
178+
// Connect to socket
179+
Socketsocket =newSocket(host,8000);
180+
181+
// Send data to server
182+
dataToServer =newDataOutputStream(socket.getOutputStream());
183+
dataToServer.writeUTF("GET_LAST");
184+
dataToServer.flush();
185+
186+
// Recieve object from server
187+
objectFromServer =newObjectInputStream(socket.getInputStream());
188+
StudentAddresss = (StudentAddress)objectFromServer.readObject();
189+
190+
setTextFields(s);
191+
192+
// Recieve data from server
193+
dataFromServer =newDataInputStream(socket.getInputStream());
194+
index =dataFromServer.readInt();// Get this address index
195+
size =dataFromServer.readInt();// Get number of addresses stored
196+
System.out.println("Address index: " +index);
197+
}
198+
catch (ClassNotFoundExceptionex) {
199+
ex.printStackTrace();
200+
}
201+
catch(IOExceptionex) {
202+
ex.printStackTrace();
203+
}
204+
}
205+
206+
/** Set the text fields */
207+
privatevoidsetTextFields(StudentAddresss) {
208+
tfName.setText(s.getName());
209+
tfStreet.setText(s.getStreet());
210+
tfCity.setText(s.getCity());
211+
tfState.setText(s.getState());
212+
tfZip.setText(s.getZip());
213+
}
214+
}
Binary file not shown.
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
publicclassStudentAddressimplementsjava.io.Serializable {
2+
privateStringname;
3+
privateStringstreet;
4+
privateStringcity;
5+
privateStringstate;
6+
privateStringzip;
7+
8+
publicStudentAddress(Stringname,Stringstreet,Stringcity,
9+
Stringstate,Stringzip) {
10+
this.name =name;
11+
this.street =street;
12+
this.city =city;
13+
this.state =state;
14+
this.zip =zip;
15+
}
16+
17+
publicStringgetName() {
18+
returnname;
19+
}
20+
21+
publicStringgetStreet() {
22+
returnstreet;
23+
}
24+
25+
publicStringgetCity() {
26+
returncity;
27+
}
28+
29+
publicStringgetState() {
30+
returnstate;
31+
}
32+
33+
publicStringgetZip() {
34+
returnzip;
35+
}
36+
}
Binary file not shown.
Binary file not shown.
Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
importjava.io.*;
2+
importjava.net.*;
3+
importjava.util.*;
4+
importjava.util.concurrent.*;
5+
6+
publicclassExercise31_06Server {
7+
// IO Streams
8+
privateObjectInputStreamobjectFromClient;
9+
privateObjectOutputStreamobjectToClient;
10+
privateDataOutputStreamdataToClient;
11+
privateDataInputStreamdataFromClient;
12+
13+
// Create a list of student addresses
14+
privateList<StudentAddress>addresses =newArrayList<>();
15+
16+
// Limit the concurrent connections to two clients
17+
privatestaticfinalintCONCURRENT_CONNECTIONS =2;
18+
19+
// Create a semaphore
20+
privatestaticSemaphoresemaphore =newSemaphore(CONCURRENT_CONNECTIONS);
21+
22+
publicstaticvoidmain(String[]args) {
23+
newExercise31_06Server();
24+
}
25+
26+
publicExercise31_06Server() {
27+
try {
28+
// Create a server socket
29+
ServerSocketserverSocket =newServerSocket(8000);
30+
System.out.println("Server started ");
31+
32+
while (true) {
33+
// Listen for a new connection request
34+
Socketsocket =serverSocket.accept();
35+
36+
// Create and start a new thread for the connection
37+
newThread(newHandleAClient(socket)).start();
38+
}
39+
}
40+
catch (IOExceptionex) {
41+
ex.printStackTrace();
42+
}
43+
finally {
44+
try {
45+
objectFromClient.close();
46+
objectToClient.close();
47+
dataFromClient.close();
48+
dataToClient.close();
49+
}
50+
catch (Exceptionex) {
51+
ex.printStackTrace();
52+
}
53+
}
54+
}
55+
56+
// Define the thread class for handling new connection
57+
classHandleAClientimplementsRunnable {
58+
privateSocketsocket;// A connected socket
59+
60+
/** Construct a thread */
61+
publicHandleAClient(Socketsocket) {
62+
this.socket =socket;
63+
}
64+
65+
/* Run a thread */
66+
publicvoidrun() {
67+
try {
68+
semaphore.acquire();// Acquire a permit
69+
70+
// Create an input stream from the socket
71+
dataFromClient =newDataInputStream(socket.getInputStream());
72+
Stringcommand =dataFromClient.readUTF();
73+
74+
if (command.equals("ADD_STUDENT")) {// Add object to list
75+
objectFromClient =newObjectInputStream(socket.getInputStream());
76+
77+
// Read object from input and add it to addresses
78+
StudentAddressobject = (StudentAddress)objectFromClient.readObject();
79+
addresses.add(object);
80+
System.out.println("Number of students: " +addresses.size());
81+
82+
// Send object index to client
83+
dataToClient =newDataOutputStream(socket.getOutputStream());
84+
dataToClient.writeInt(addresses.indexOf(object));
85+
dataToClient.writeInt(addresses.size());
86+
}
87+
elseif (command.equals("GET_INDEX")) {// Send object to client
88+
// Read data from input
89+
intindex =dataFromClient.readInt();
90+
System.out.println("Client wants address at index: " +index);
91+
if (index <0)
92+
index =0;
93+
if (index >=addresses.size())
94+
index =addresses.size() -1;
95+
96+
// Send the specified object and its index to client
97+
objectToClient =newObjectOutputStream(socket.getOutputStream());
98+
objectToClient.writeObject(addresses.get(index));
99+
100+
dataToClient =newDataOutputStream(socket.getOutputStream());
101+
dataToClient.writeInt(index);
102+
103+
// Send the number of addresses stored
104+
dataToClient.writeInt(addresses.size());
105+
objectToClient.flush();
106+
System.out.println("Address at index " +index +" sent to client");
107+
}
108+
elseif (command.equals("GET_LAST")) {
109+
// Send last object to client
110+
intindex =addresses.size() -1;
111+
objectToClient =newObjectOutputStream(socket.getOutputStream());
112+
objectToClient.writeObject(addresses.get(index));
113+
114+
dataToClient =newDataOutputStream(socket.getOutputStream());
115+
dataToClient.writeInt(index);
116+
117+
// Send the number of addresses stored
118+
dataToClient.writeInt(addresses.size());
119+
objectToClient.flush();
120+
System.out.println("Address at index " +index +" sent to client");
121+
}
122+
}
123+
catch (ClassNotFoundExceptionex) {
124+
ex.printStackTrace();
125+
}
126+
catch (IOExceptionex) {
127+
ex.printStackTrace();
128+
}
129+
catch (InterruptedExceptionex) {
130+
ex.printStackTrace();
131+
}
132+
finally {
133+
semaphore.release();// Release a permit
134+
}
135+
}
136+
}
137+
}
Binary file not shown.

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp