-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
0baef3c
commit 042cf75
Showing
4 changed files
with
294 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
/* | ||
* To change this license header, choose License Headers in Project Properties. | ||
* To change this template file, choose Tools | Templates | ||
* and open the template in the editor. | ||
*/ | ||
package os; | ||
|
||
import java.io.BufferedReader; | ||
import java.io.IOException; | ||
import java.io.InputStream; | ||
import java.io.InputStreamReader; | ||
import java.io.PrintWriter; | ||
import java.math.BigInteger; | ||
import java.net.Socket; | ||
import java.util.ArrayList; | ||
|
||
|
||
public class Client { | ||
public static void main(String[] args) throws IOException{ | ||
Socket socket = new Socket("127.0.0.1", 5000); | ||
//InputStream inputStream = socket.getInputStream(); | ||
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); | ||
PrintWriter socketWriter = new PrintWriter(socket.getOutputStream(),true); | ||
String reply = ""; | ||
int pos=-1; | ||
reply = br.readLine(); | ||
if(reply.startsWith("success")){ | ||
pos = Integer.parseInt(reply.substring(reply.indexOf(":")+1)); | ||
System.out.println("Connected Successfully with server:" + pos); | ||
}else{ | ||
System.out.println("Something went wrong"); | ||
System.exit(0); | ||
} | ||
|
||
socketWriter.println(pos); | ||
|
||
String startString = br.readLine(); | ||
String endString = br.readLine(); | ||
|
||
//int sno = Integer.parseInt(startString.substring(startString.indexOf(":"))+1); | ||
//int eno = Integer. | ||
|
||
String[] startArray = startString.split(":"); | ||
String[] endArray = endString.split(":"); | ||
BigInteger startNum = new BigInteger(startArray[1]); | ||
BigInteger endNum = new BigInteger(endArray[1]); | ||
BigInteger one = new BigInteger("1"); | ||
BigInteger two = new BigInteger("2"); | ||
BigInteger zero = new BigInteger("0"); | ||
//BigInteger j = two; | ||
//ArrayList<Integer> res = new ArrayList<>(); | ||
int flag = 0; | ||
int counter=0; | ||
for(;startNum.compareTo(endNum)<=0;startNum=startNum.add(one)){ | ||
for(BigInteger j=two;j.compareTo(startNum)<0;j=j.add(one)){ | ||
if((startNum.mod(j)).compareTo(zero)==0){ | ||
flag = 0; | ||
break; | ||
}else{ | ||
flag = 1; | ||
} | ||
} | ||
if(flag==1){ | ||
//res.add(counter++); | ||
counter++; | ||
} | ||
} | ||
|
||
|
||
//for(Integer curr : res){ | ||
socketWriter.println("Client " + pos + ":" + counter); | ||
//} | ||
|
||
socketWriter.println("bye"); | ||
socket.close(); | ||
} | ||
} |
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,213 @@ | ||
/* | ||
* To change this license header, choose License Headers in Project Properties. | ||
* To change this template file, choose Tools | Templates | ||
* and open the template in the editor. | ||
*/ | ||
|
||
//import com.sun.xml.internal.ws.util.StringUtils; | ||
import java.io.BufferedReader; | ||
import java.io.BufferedWriter; | ||
import java.io.File; | ||
import java.io.FileNotFoundException; | ||
import java.io.FileReader; | ||
import java.io.FileWriter; | ||
import java.io.IOException; | ||
import java.io.InputStream; | ||
import java.io.InputStreamReader; | ||
import java.io.PrintWriter; | ||
import java.math.BigInteger; | ||
import java.net.ServerSocket; | ||
import java.net.Socket; | ||
import java.util.ArrayList; | ||
import java.util.logging.Level; | ||
import java.util.logging.Logger; | ||
|
||
|
||
public class Server { | ||
|
||
|
||
class ClientHandler implements Runnable{ | ||
Socket socket; | ||
BufferedReader reader; | ||
PrintWriter writer; | ||
public ClientHandler(Socket socket) throws IOException{ | ||
this.socket = socket; | ||
} | ||
|
||
@Override | ||
public void run() { | ||
try { | ||
reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); | ||
writer = new PrintWriter(socket.getOutputStream(), true); | ||
writer.println("success:" + clientNum++ ); | ||
System.out.println("client success"); | ||
|
||
//reader.close(); | ||
//writer.close(); | ||
//socket.close(); | ||
} catch (IOException ex) { | ||
Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex); | ||
} | ||
} | ||
|
||
} | ||
|
||
static ArrayList<ClientHandler> clientList; | ||
static ArrayList<Element> nums; | ||
static int clientNum=0; | ||
public static void main(String[] args) throws IOException, InterruptedException{ | ||
|
||
File file = new File("/home/student/Desktop/sample.txt"); | ||
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in)); | ||
System.out.println("Enter any number:"); | ||
String prime = stdin.readLine(); | ||
|
||
PrintWriter fileWriter = new PrintWriter(file); | ||
fileWriter.println("Input:" + prime); | ||
fileWriter.close(); | ||
|
||
ServerSocket serverSocket = new ServerSocket(5000); // The port on which this Server program will accept clients | ||
Server mainServer = new Server(); // Object of this class | ||
clientList = new ArrayList<>(); | ||
mainServer.init(serverSocket); // Initializes the members of the class by accepting connections on the serverSocket port:5000 | ||
mainServer.giveInputToClients(prime); | ||
|
||
int[] done = new int[clientList.size()]; | ||
for(int i=0;i<clientList.size();i++){ | ||
|
||
String clientPosition=""; | ||
for(int j=0;j<clientList.size();j++){ | ||
if(done[j]==0){ | ||
// Accepts the postion number printed by the client using socketWriter.println(pos); on line 38 | ||
clientPosition = clientList.get(i).reader.readLine(); | ||
if(isNumeric(clientPosition) && done[j]==0){ | ||
done[j] = 1; | ||
break; | ||
} | ||
} | ||
} | ||
int position = Integer.parseInt(clientPosition); | ||
System.out.println("Read input from client ID:" + position); | ||
mainServer.readInputNumber(position); | ||
} | ||
|
||
int endarray=0; | ||
while(true){ | ||
for(int k=0;k<clientList.size();k++){ | ||
String line = clientList.get(k).reader.readLine(); | ||
if(line!=null){ | ||
if(line.startsWith("Client")){ | ||
mainServer.writeToFile(line); | ||
}else if(line.equals("bye")){ | ||
endarray++; | ||
break; | ||
} | ||
} | ||
} | ||
|
||
if(endarray==clientList.size()){ | ||
break; | ||
} | ||
} | ||
|
||
serverSocket.close(); | ||
} | ||
|
||
void init(ServerSocket serverSocket) throws IOException, InterruptedException{ | ||
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); | ||
System.out.println("Waiting for connections..."); | ||
while(true){ | ||
Socket socket = serverSocket.accept(); | ||
ClientHandler newClient = new ClientHandler(socket); | ||
clientList.add(newClient); | ||
|
||
Thread t = new Thread(newClient); | ||
t.start(); | ||
|
||
//t.join(); | ||
|
||
System.out.println("Do you want to add more clients(Y/n):"); | ||
String ch = br.readLine(); | ||
|
||
if(ch.equalsIgnoreCase("n")){ | ||
break; | ||
} | ||
} | ||
|
||
System.out.println(clientList.size() + " client(s) connected!"); | ||
} | ||
|
||
void giveInputToClients(String prime){ | ||
System.out.println("Dividing task..."); | ||
BigInteger bigInt = new BigInteger(prime); | ||
int n = clientList.size(); | ||
nums = new ArrayList<>(); | ||
|
||
//BigInteger div = bigInt.divide(BigInteger.valueOf(Long.parseLong(String.valueOf(n)))); | ||
BigInteger nn = new BigInteger(String.valueOf(n)); | ||
BigInteger div = bigInt.divide(nn); | ||
BigInteger start = new BigInteger(String.valueOf("2")); | ||
BigInteger end = div; | ||
|
||
BigInteger i = new BigInteger(String.valueOf("0")); | ||
BigInteger one = new BigInteger(String.valueOf("1")); | ||
for(int j=0;j<(n-1);j++){ | ||
Element currElement = new Element(start, end); | ||
nums.add(currElement); | ||
start = end.add(one); | ||
end = end.add(div); | ||
} | ||
//start = end; | ||
end = bigInt; | ||
nums.add(new Element(start,end)); | ||
System.out.println("Input Distributed"); | ||
|
||
for(Element curr : nums){ | ||
System.out.println("Start:" + curr.getStart() + " End:" + curr.getEnd()); | ||
} | ||
} | ||
|
||
void readInputNumber(int pos){ | ||
String start = nums.get(pos).getStart().toString(); | ||
String end = nums.get(pos).getEnd().toString(); | ||
|
||
clientList.get(pos).writer.println("Start:" + start); | ||
clientList.get(pos).writer.println("End:" + end); | ||
} | ||
|
||
synchronized void writeToFile(String line) throws FileNotFoundException, IOException{ | ||
File file = new File("/home/student/Desktop/sample.txt"); | ||
FileWriter fw = new FileWriter(file,true); | ||
BufferedWriter bw = new BufferedWriter(fw); | ||
PrintWriter writer = new PrintWriter(bw); | ||
writer.println(line); | ||
writer.close(); | ||
} | ||
|
||
class Element{ | ||
BigInteger start; | ||
BigInteger end; | ||
public Element(BigInteger start, BigInteger end){ | ||
this.start = start; | ||
this.end = end; | ||
} | ||
|
||
public BigInteger getStart(){ | ||
return start; | ||
} | ||
|
||
public BigInteger getEnd(){ | ||
return end; | ||
} | ||
|
||
|
||
} | ||
public static boolean isNumeric(String str){ | ||
try { | ||
double d = Double.parseDouble(str); | ||
}catch(NumberFormatException nfe){ | ||
return false; | ||
} | ||
return true; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
Input:100000 | ||
Client 0:3568 | ||
Client 1:3076 | ||
Client 2:2947 |