diff --git a/klient/Projekt-Final.jar b/klient/Projekt-Final.jar index 936cae9..a14431f 100644 Binary files a/klient/Projekt-Final.jar and b/klient/Projekt-Final.jar differ diff --git a/klient/src/main/java/Projekt/App.java b/klient/src/main/java/Projekt/App.java index 4bc8060..a1975e5 100644 --- a/klient/src/main/java/Projekt/App.java +++ b/klient/src/main/java/Projekt/App.java @@ -42,21 +42,18 @@ public class App { public void run() { //uwazac zeby nie dochodzic jednoczesnie do tej samej zmiennej (synchronize?) Socket rSocket; DataInputStream rDis; - DataOutputStream rDos; try { InetAddress rAddr = InetAddress.getByName(ipText.getText()); int rPort = Integer.parseInt(portText.getText()); - rSocket = new Socket(rAddr, rPort); // laczymy + rSocket = new Socket(rAddr, rPort + 1); // laczymy rDis = new DataInputStream(rSocket.getInputStream()); // tu bedziemy przyjmowac wiadomosci - rDos = new DataOutputStream(rSocket.getOutputStream()); - rDos.write(convert("R")); //wysyƂamy znaczek R - ipText.setText("OK1"); + messages.addElement("Listen connection ok"); + messagesL.setModel(messages); while (true) { //czytamy wiadomosc byte[] rec = new byte[1024]; if (rDis.read(rec) > 0){ String s = new String(rec); - //System.out.println("Serwer powiedzial: "+s); messages.addElement(s); messagesL.setModel(messages); } @@ -70,20 +67,7 @@ public class App { } }; - try { - receiveThread.start(); - //ustanawiamy polaczenie na wysylanie wiadomosci - InetAddress tAddr = InetAddress.getByName(ipText.getText()); - int tPort = Integer.parseInt(portText.getText()); - tSocket = new Socket(tAddr, tPort); // laczymy - tDos = new DataOutputStream(tSocket.getOutputStream()); // tu wysylamy wiadomosci - tDos.write(convert("T")); //wysylamy T - portText.setText("OK2"); - - } catch (Exception ae){ - ae.printStackTrace(); - portText.setText("CANT CONNECT"); - } + receiveThread.start(); } }); myUserT = new JTextField("Nick"); @@ -97,12 +81,18 @@ public class App { mSendB.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { //wysylanie wiadomosci try { + //ustanawiamy polaczenie na wysylanie wiadomosci + InetAddress tAddr = InetAddress.getByName(ipText.getText()); + int tPort = Integer.parseInt(portText.getText()); + tSocket = new Socket(tAddr, tPort); // laczymy + tDos = new DataOutputStream(tSocket.getOutputStream()); // tu wysylamy wiadomosci tDos.write(convert(myUserT.getText() + "> " + messageT.getText())); //wysylamy messageT.setText(""); - - } catch (Exception e1) { - messageT.setText("CANT SEND"); - e1.printStackTrace(); + tSocket.close(); //czy to tez trzeba? + + } catch (Exception ae){ + ae.printStackTrace(); + portText.setText("CANT SEND"); } } }); diff --git a/server/uberProstyServer.c b/server/uberProstyServer.c index 7ed3bb6..0eaff9e 100644 --- a/server/uberProstyServer.c +++ b/server/uberProstyServer.c @@ -10,16 +10,25 @@ int main(void) { char bufor[1024], rBufor[1024], tBufor[1024]; //wiadomosc int gniazdo, gniazdo2, rGniazdo, tGniazdo; - struct sockaddr_in adr, nadawca, rNadawca, tNadawca; + struct sockaddr_in adr, rNadawca, tNadawca, adrS; socklen_t dl = sizeof(struct sockaddr_in); - gniazdo = socket(PF_INET, SOCK_STREAM, 0); + gniazdo2 = socket(PF_INET, SOCK_STREAM, 0); + + //adres do odbierania widomosci od klienta adr.sin_family = AF_INET; adr.sin_port = htons(44444); //port adr.sin_addr.s_addr = INADDR_ANY; - printf("Slucham na %s:%d\n", inet_ntoa(adr.sin_addr), ntohs(adr.sin_port)); + //adres do wysylania widomosci do klienta + adrS.sin_family = AF_INET; + adrS.sin_port = htons(44445); //port + adrS.sin_addr.s_addr = INADDR_ANY; + printf("Odbieram na %s:%d\n", inet_ntoa(adr.sin_addr), ntohs(adr.sin_port)); + printf("Wysylam na %s:%d\n", inet_ntoa(adrS.sin_addr), ntohs(adrS.sin_port)); + + //konfiguracja do odbierania wiadomosci if (bind(gniazdo, (struct sockaddr*) &adr, sizeof(adr)) < 0) { //bind printf("Bind nie powiodl sie.\n"); return 1; @@ -28,38 +37,41 @@ int main(void) { printf("Listen nie powiodl sie.\n"); return 1; } - printf("Czekam na polaczenie ...\n"); - while ((gniazdo2 = accept(gniazdo, (struct sockaddr*) &nadawca, &dl)) > 0) { //odbieranie - memset(bufor, 0, 1024); - recv(gniazdo2, bufor, 1024, 0); - printf("Wiadomosc od %s: %s\n", inet_ntoa(nadawca.sin_addr), bufor); - if (bufor[0] == 'T'){ - tGniazdo = gniazdo2; - tNadawca = nadawca; - if (fork() == 0){ //child wejdzie w while - while (1){ - memset(tBufor, 0, 1024); - recv(tGniazdo, tBufor, 1024, 0); - printf("Wiadomosc od %s: %s\n", inet_ntoa(tNadawca.sin_addr), tBufor); - } - } - } else { - rGniazdo = gniazdo2; - rNadawca = nadawca; - if(fork() == 0){ //child wejdzie w while + + //konfiguracja do wysylania wiadomosci + if (bind(gniazdo2, (struct sockaddr*) &adrS, sizeof(adrS)) < 0) { //bind + printf("Bind nie powiodl sie.\n"); + return 1; + } + if (listen(gniazdo2, 10) < 0) { //listen + printf("Listen nie powiodl sie.\n"); + return 1; + } + printf("Polaczenia skonfigurowane ...\n"); + + if (fork() == 0){ //child wejdzie w to TUTAJ WYSYLAM WIDOMOSCI co 5 sekund + while ((tGniazdo = accept(gniazdo2, (struct sockaddr*) &tNadawca, &dl)) > 0) { int licznik = 1; while(1){ - memset(rBufor, 0, 1024); - rBufor[1] = licznik + '0'; + memset(tBufor, 0, 1024); + tBufor[1] = licznik + '0'; printf("Wysylam licznik\n"); - send(rGniazdo, rBufor, 1024, 0); + send(tGniazdo, tBufor, 1024, 0); licznik += 1; sleep(5); } - } } - close(gniazdo2); + } else { //tutaj odbieram wiadomosci + while ((rGniazdo = accept(gniazdo, (struct sockaddr*) &rNadawca, &dl)) > 0) { //odbieranie + memset(rBufor, 0, 1024); + recv(rGniazdo, rBufor, 1024, 0); + printf("Wiadomosc od %s: %s\n", inet_ntoa(rNadawca.sin_addr), rBufor); + close(rGniazdo); + } } + + //do tego w sumie nigdy nie dojdziemy + close(gniazdo2); close(gniazdo); return 0; } \ No newline at end of file