Initial commit
This commit is contained in:
BIN
Problem 3.16/SocketClient.class
Normal file
BIN
Problem 3.16/SocketClient.class
Normal file
Binary file not shown.
24
Problem 3.16/SocketClient.java
Normal file
24
Problem 3.16/SocketClient.java
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
import java.net.*;
|
||||||
|
import java.io.*;
|
||||||
|
|
||||||
|
public class SocketClient {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
try {
|
||||||
|
// make connection to server socket
|
||||||
|
Socket sock = new Socket("127.0.0.1", 6017);
|
||||||
|
InputStream in = sock.getInputStream();
|
||||||
|
BufferedReader bin = new BufferedReader(new InputStreamReader(in));
|
||||||
|
|
||||||
|
// get a qoute from the socket
|
||||||
|
String line;
|
||||||
|
while ( (line = bin.readLine()) != null)
|
||||||
|
System.out.println(line);
|
||||||
|
|
||||||
|
// close the socket connection
|
||||||
|
sock.close();
|
||||||
|
}
|
||||||
|
catch (IOException ioe) {
|
||||||
|
System.err.println(ioe);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
BIN
Problem 3.16/SocketServer.class
Normal file
BIN
Problem 3.16/SocketServer.class
Normal file
Binary file not shown.
36
Problem 3.16/SocketServer.java
Normal file
36
Problem 3.16/SocketServer.java
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
import java.net.*;
|
||||||
|
import java.io.*;
|
||||||
|
|
||||||
|
public class SocketServer {
|
||||||
|
public static String[] qoutes = {
|
||||||
|
"Don't cry because it's over, smile because it happened.",
|
||||||
|
"Be yourself; everyone else is already taken.",
|
||||||
|
"Two things are infinite: the universe and human stupidity; and I'm not sure about the universe.",
|
||||||
|
"So many books, so little time.",
|
||||||
|
"Be who you are and say what you feel, because those who mind don't matter, and those who matter don't mind."
|
||||||
|
};
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
try {
|
||||||
|
int i = 0;
|
||||||
|
ServerSocket sock = new ServerSocket(6017);
|
||||||
|
|
||||||
|
// Listening for connections
|
||||||
|
while (true) {
|
||||||
|
Socket client = sock.accept();
|
||||||
|
PrintWriter pout = new PrintWriter(client.getOutputStream(), true);
|
||||||
|
|
||||||
|
// write a qoute to the socket
|
||||||
|
pout.println(qoutes[i]);
|
||||||
|
i = (i + 1) % qoutes.length;
|
||||||
|
|
||||||
|
// close the socket and resume
|
||||||
|
// listening for connections
|
||||||
|
client.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (IOException ioe) {
|
||||||
|
System.err.println(ioe);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
BIN
Problem 3.18/SocketClient.class
Normal file
BIN
Problem 3.18/SocketClient.class
Normal file
Binary file not shown.
35
Problem 3.18/SocketClient.java
Normal file
35
Problem 3.18/SocketClient.java
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
import java.net.*;
|
||||||
|
import java.io.*;
|
||||||
|
import java.util.Scanner;
|
||||||
|
|
||||||
|
public class SocketClient {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
Socket sock = null;
|
||||||
|
Scanner scanner = null;
|
||||||
|
try {
|
||||||
|
sock = new Socket("127.0.0.1", 6017);
|
||||||
|
scanner = new Scanner(System.in);
|
||||||
|
DataOutputStream outputStream = new DataOutputStream(sock.getOutputStream());
|
||||||
|
DataInputStream inputStream = new DataInputStream(sock.getInputStream());
|
||||||
|
while (true) {
|
||||||
|
try {
|
||||||
|
System.out.print("Input: ");
|
||||||
|
String message = scanner.nextLine();
|
||||||
|
outputStream.writeUTF(message);
|
||||||
|
System.out.println("Echo: " + inputStream.readUTF());
|
||||||
|
} catch (IOException e) {
|
||||||
|
System.err.println(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (IOException ioe) {
|
||||||
|
System.err.println(ioe);
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
try {
|
||||||
|
scanner.close();
|
||||||
|
sock.close();
|
||||||
|
} catch (IOException e) {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
BIN
Problem 3.18/SocketServer.class
Normal file
BIN
Problem 3.18/SocketServer.class
Normal file
Binary file not shown.
37
Problem 3.18/SocketServer.java
Normal file
37
Problem 3.18/SocketServer.java
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
import java.net.*;
|
||||||
|
import java.io.*;
|
||||||
|
|
||||||
|
public class SocketServer {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
ServerSocket sock = null;
|
||||||
|
Socket client = null;
|
||||||
|
try {
|
||||||
|
sock = new ServerSocket(6017);
|
||||||
|
client = sock.accept();
|
||||||
|
DataInputStream inputStream = new DataInputStream(client.getInputStream());
|
||||||
|
DataOutputStream outputStream = new DataOutputStream(client.getOutputStream());
|
||||||
|
while (true) {
|
||||||
|
try {
|
||||||
|
String message = inputStream.readUTF();
|
||||||
|
System.out.println("Client: " + message);
|
||||||
|
outputStream.writeUTF(message);
|
||||||
|
} catch (IOException e) {
|
||||||
|
if (e.getMessage().equals("null")) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
inputStream.close();
|
||||||
|
outputStream.close();
|
||||||
|
client.close();
|
||||||
|
sock.close();
|
||||||
|
}
|
||||||
|
catch (IOException ioe) {
|
||||||
|
try {
|
||||||
|
sock.close();
|
||||||
|
client.close();
|
||||||
|
} catch (IOException e) {}
|
||||||
|
System.err.println(ioe);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
52
Problem 3.20/main.c
Normal file
52
Problem 3.20/main.c
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#define SIZE 65536
|
||||||
|
|
||||||
|
int main(int argc, char *argv[]) {
|
||||||
|
int pipefd[2]; // pipefd[0] represents input stream id, pipefd[1] represents output stream id.
|
||||||
|
char buffer[SIZE]; // The buffer of main process.
|
||||||
|
char childBuffer[SIZE]; // The buffer of sub-process.
|
||||||
|
|
||||||
|
// If the number of arguments is not correct.
|
||||||
|
if (argc != 3) {
|
||||||
|
perror("Main: main [target] [destination].\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *srcFile = argv[1]; // Source
|
||||||
|
char *dstFile = argv[2]; // Destination
|
||||||
|
|
||||||
|
// Building a pipe. If the returned integer is less than 0,
|
||||||
|
if (pipe(pipefd) < 0) {
|
||||||
|
printf("An error occured when createing the pipe: %s\n", strerror(errno));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
pid_t pid = fork(); // Create a sub-process.
|
||||||
|
|
||||||
|
if (pid == 0) { // pid == 0 represents it's a sub-process.
|
||||||
|
close(pipefd[1]); // Close pipefd[1]
|
||||||
|
ssize_t file_size = read(pipefd[0], childBuffer, sizeof(childBuffer)); // Get the size of child
|
||||||
|
close(pipefd[0]); // Close pipefd[0] since it is unable to use.
|
||||||
|
int dst_file_fd = open(dstFile, O_CREAT | O_WRONLY); // Read a file in writeonly mode. If the file does not exit, create a new one.
|
||||||
|
write(dst_file_fd, childBuffer, file_size); // Write data from buffer into fd.
|
||||||
|
close(dst_file_fd); // Close file
|
||||||
|
}
|
||||||
|
else if (pid > 0) { // pid > 0 represents it's a main process.
|
||||||
|
close(pipefd[0]); // Close pipefd[0]
|
||||||
|
int target_file_fd = open(srcFile, O_RDONLY); // Open a file in readonly mode.
|
||||||
|
ssize_t file_size = read(target_file_fd, buffer, sizeof(buffer)); // Get size of the file
|
||||||
|
write(pipefd[1], buffer, file_size); // Write data from buffer into pipefd[1]
|
||||||
|
close(pipefd[1]); // Close pipefd[1]
|
||||||
|
close(target_file_fd); // Close file
|
||||||
|
}
|
||||||
|
else { // When error occur
|
||||||
|
printf("An error occured when forking child process. %s\n", strerror(errno));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
Reference in New Issue
Block a user