Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
P
paras
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Container registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Simsim
paras
Commits
d62602f6
Commit
d62602f6
authored
7 years ago
by
Simo Vuorinen
Browse files
Options
Downloads
Patches
Plain Diff
Add new file
parent
867a1514
Branches
master
No related tags found
No related merge requests found
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
Koodi hajo1
+249
-0
249 additions, 0 deletions
Koodi hajo1
with
249 additions
and
0 deletions
Koodi hajo1
0 → 100644
+
249
−
0
View file @
d62602f6
import java.util.*;
import java.net.*;
import java.io.*;
public class SovellusX extends Thread {
public static void main(String[] args) throws Exception {
LaskeLuvut laskuri = null; //LASKELUVUT LUOKKAINEN laskuri LUODAAN
Socket Soketti = Yhdistä(); //YHDISTÄ METODI LUO YHTEYDEN JA LÄHETTÄÄ HALUTUN PAKETIN
//JONKA AVULLA LUODAAN STREAMIT
ObjectInputStream inpStream = new ObjectInputStream(Soketti.getInputStream());
ObjectOutputStream outpStream = new ObjectOutputStream(Soketti.getOutputStream());
Soketti.setSoTimeout(50000);
int porttienMäärä=lueStream(inpStream, outpStream); //NAPATAAN VIRRASTA HALUTTUJEN SOKETTIEN MÄÄRÄ
int[] portnumbers =new int[porttienMäärä]; //LUODAAN NIILLE LISTA
ArrayList<Socket> sok = new ArrayList<Socket>(); //SOKETEILLE LISTA
boolean yhteys=true;
int kysymys= 0;
if (porttienMäärä == -1) { //JOS STREAMI LÄHETTÄÄ -1 NIIN SULJETAAN YHTEYS
Soketti.close();
return;}
else { //LUODAAN PORTIT JOTKA LÄHETETÄÄN SERVERILLE
for (int i = 0; i < porttienMäärä; i++ ) {
try{
int p = 1234+i;
portnumbers[i]=p;
outpStream.writeInt(portnumbers[i]);
outpStream.flush();
} catch (Exception e) {
return;
}
}
}
//LUODAAN SOKETIT JA YHDISTETÄÄN NE SERVERIIN JA TALLENNETAAN
for (int i = 0; i<porttienMäärä; i++) {
ServerSocket ServSoket = new ServerSocket(portnumbers[i]);
ServSoket.setSoTimeout(5000);
Socket soket = new Socket();
soket = ServSoket.accept();
sok.add(i, soket);
ServSoket.setSoTimeout(5000);
ServSoket.close();
}
//LISTA-LUOKAN METODI JOKA LISÄÄ PAIKKOJA SIELLÄ OLEVAAN LISTAAN,
//VASTAANOTTAVILLE SOKETEILLE JOHON NE TALLENTAVAT LUVUT
Lista.kasvatalistaa(porttienMäärä);
//KÄYNNISTETÄÄN JOKAISELLE PAIKALLE OMA LASKURI
for (int paikka = 0; paikka<porttienMäärä; paikka++) {
laskuri= new LaskeLuvut(paikka, sok);
laskuri.start();}
while(yhteys){
kysymys=inpStream.readInt();
//LUETAAN STREAMIN KYSYMYKSET JA OTETAAN LISTASTA OIKEA VASTAUS
if (kysymys==1){
Thread.sleep(300); //JOTTA LISTA OLISI KYSYMYKSEN KANSSA SAMALLA TASOLLA
int sum=0;
sum =Lista.koksum();
outpStream.writeInt(sum);
outpStream.flush();
System.out.println("Kysymys: 1 ,Vastaus: "+sum);
}else if (kysymys==2){
Thread.sleep(300);
outpStream.writeInt(Lista.isoinSumma());
outpStream.flush();
System.out.println("Kysymys: 2 ,Vastaus: "+Lista.isoinSumma());
}else if (kysymys==3) {
Thread.sleep(300);
outpStream.writeInt(Lista.returnkaikki());
outpStream.flush();
System.out.println("Kysymys: 3 ,Vastaus: "+Lista.returnkaikki());
}else if (kysymys==0) {
System.out.println("Sulkemispyyntö");
yhteys=false;
Soketti.close(); //SULJETAAN KAIKKI MAHDOLLISET SOKETIT JA laskuri
outpStream.close();
inpStream.close();
laskuri.close();
break;
}
}
}
public static class LaskeLuvut extends Thread{
//laskuri KÄYTTÄÄ TÄTÄ LUOKKAA JA NÄITÄ MUUTTUJIA
private int paikka;
private int saatuLuku=0;
Lista lis=new Lista();
ArrayList<Socket> sok ;
boolean c;
private Socket soketti;
private ObjectInputStream inStream;
LaskeLuvut(int paikka, ArrayList<Socket> sok){
this.sok=sok;
this.paikka=paikka;
}
public void run() {
try {
boolean c = true;
soketti = sok.get(paikka);
InputStream uS = soketti.getInputStream();
inStream = new ObjectInputStream(uS);
//OTTAA SOKETTI LISTALTA OIKEALTA PAIKALTA SOKETIN JA VASTAANOTTAA SIELLÄ OLEVIA LUKUJA
while (c) {
saatuLuku=inStream.readInt();
if (saatuLuku==0) {
inStream.close();
break;}
lis.lisää(paikka,saatuLuku); //lis ON TAAS YHTEYS LISTA LUOKKAAN
lis.setkaikki();
}
}catch (Exception e) {
System.out.println("En ehtinyt sulkemaan :(");
//KUN SOVELLUS SULKEUTUU NIIN EI EHDI SULKEMAAN KAIKKIA PORTTEJA/STREAMEJA
// VAAN OSA "KAATUU"
}
}
public void close() throws IOException {
c=false;
soketti.close();
inStream.close();
}
}
private static Socket Yhdistä() throws IOException {
//YHDISTÄ METODI YHDISTYY SERVERIN PORTTIIN
int porttiNo = 1234;
int yrityskerta = 0;
ServerSocket Ssocket = new ServerSocket(porttiNo);
Socket soketti = new Socket();
while (yrityskerta < 5) {
try {
sendUDP(); // LÄHETTÄÄ PAKETIN
Ssocket.setSoTimeout(50000);
soketti = Ssocket.accept();
Ssocket.close();
System.out.println("TCP muodostettu");
return soketti;
} catch (SocketException e) {
yrityskerta++;
System.out.println("Ei onnistunut");
}
}
return null;
}
private static void sendUDP() {
try { //LUODAAN PAKETTI JA YHDISTETÄÄN SERVERIN OIKEAAN PORTTIIN
InetAddress targetAddress = InetAddress.getLoopbackAddress();
DatagramSocket socket = new DatagramSocket();
byte[] data = Integer.toString(1234).getBytes();
DatagramPacket packet = new DatagramPacket (data, data.length, targetAddress, 3126);
socket.send(packet);
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
//LUKEE PORTTIEN MÄÄRÄN
private static int lueStream(ObjectInputStream i, ObjectOutputStream o) {
try {
return i.readInt();
} catch (Exception e){
try {
o.writeInt(-1);
} catch (IOException e1) {
e1.printStackTrace();
}
return -1;
}
}
public static class Lista{
//LISTA LUOKKA PERUSTUU SIELLÄ OLEVAAN LISTAAN JOHON TALLENNETAAN LUKUJEN SUMMA
static ArrayList<Integer> lista = new ArrayList<Integer>();
static int laskuri=0;
static int kokonaisSumma=0;
//LISÄKSI SAATETAAN KYSYÄ KAIKKIEN NRO- MÄÄRÄÄ TAI SUMMAA
public static ArrayList<Integer> getluvut(){
return lista;
}
//METODISSA LISÄTÄÄN LISTAN SAMALLE PAIKALLE SAMAN laskurin SAAMAT LUVUT JA LUKU LISÄTÄÄN KOKONAISSUMMAAN
public void lisää(int ID, int l) {
int summa = l;
summa=summa+lista.get(ID);
lista.set(ID, summa);
kokonaisSumma=kokonaisSumma+l;
System.out.println(lista+" Tässä on lisätty: "+l+" paikalle: "+ID);
}
public static void kasvatalistaa(int x) { //METODI LOI LISTALLE JOKAISELLE PORTILLE OMAN PAIKAN
for(int i=0; i<x;i++) {
int paikka=0;
lista.add(paikka);
}
}
public static int isoinSumma() {
int suurin=0;
int tmp=lista.get(0);
for(int i=0; i<lista.size(); i++) { //METODI VALITSEE SUMMISTA SUURIMMAN JA LÄHETTÄÄ OIKEAN VASTAUKSEN
if (lista.get(i)>=tmp) { //JOS SYÖTTEESSÄ ON 2 YHTÄSUURTA LÄHETTÄÄ SEN JOKA ON INDEKSILTÄÄN SUUREMPI
//JOKA TAAS ON VÄÄRÄ VASTAUS
tmp=lista.get(i);
suurin=i+1;
}
}
return suurin;
}
//KASVATTAA LASKURIA JOKAISEN LISÄTYN LUVUN JÄLKEEN
public static void setkaikki() {
laskuri++;
}
public static int returnkaikki() {
return laskuri;
}
public static int koksum() {
return kokonaisSumma;
}
}
}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment