Diskuze: Server a Client

Java Java Server a Client

Avatar
mara
Člen
Avatar
mara:

Ahojte mám problém. Nevím jakto, ale nefunguje mi server a client. Zdrojový kód od servru vypadá takto :

package javaapplication8;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class JavaApplication8 {
    public static int socfileketPort = 4444;
    public static String fileToGet = "/home/marek/Plocha/soubor_1_byl_prijat.txt";
    public static int file_size = 60000;

    public static void main(String[] args) throws IOException {
            int bytesRead;
            int current = 0;
            FileOutputStream fos = null;
            BufferedOutputStream bos = null;
            ServerSocket servsock = null;
            Socket sock = null;
        try{
            servsock = new ServerSocket(4444);
            System.out.println("waiting .....");
            while (true){
                System.out.println("13");
                    sock = servsock.accept();
                    System.out.println("pripojeno");
                    byte[] mybytearray = new byte[file_size];
                    InputStream is = sock.getInputStream();
                    fos = new FileOutputStream(fileToGet);
                    bos = new BufferedOutputStream(fos);
                    bytesRead = is.read(mybytearray, 0, mybytearray.length);
                    current = bytesRead;
                    do{
                        bytesRead = is.read(mybytearray, current, (mybytearray.length - current));
                        if(bytesRead >= 0) current += bytesRead;

                    }while(bytesRead > -1);
                    bos.write(mybytearray, 0, current);
                    bos.flush();
            }


        }catch(Exception e){
            e.printStackTrace();
        }finally{
            if(fos != null) fos.close();
            if(bos != null) bos.close();
            if(sock != null) sock.close();

        }
    }
}

a od clienta takto :

package com.example.marek.comunication;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.net.Socket;

public class Send extends Activity {
    String s;
    String FileToSend;
    FileInputStream fis;
    BufferedInputStream bis;
    OutputStream os;
    Socket sock;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);
        Intent it = getIntent();
        final Uri uri = it.getParcelableExtra(Intent.EXTRA_STREAM);
        s = uri.toString();
        FileToSend = s;
        Button button = (Button)findViewById(R.id.reconnect_button);
        button.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                Thread start = new Thread(new Runnable() {
                    @Override
                    public void run() {

                        try{
                            sock = new Socket("192.168.1.13", 4444);
                            while(true){
                                File myFile = new File(FileToSend);
                                byte[] mybytearray = new byte[(int)myFile.length()];
                                fis = new FileInputStream(myFile);
                                bis = new BufferedInputStream(fis);
                                bis.read(mybytearray, 0, mybytearray.length);
                                os = sock.getOutputStream();
                                os.write(mybytearray, 0, mybytearray.length);
                                os.flush();


                            }

                        }catch(Exception e){
                            e.printStackTrace();
                        }finally{
                             try {
                                 if(bis != null) bis.close();
                                 if (fis != null) fis.close();
                                 if (sock != null) sock.close();
                            } catch (Exception e) {
                                e.printStackTrace();
                            }

                        }


                    }
                });
                start.start();
            }
        });

    }
}

všem moc děkuji za odpověď :) Už nevím, co dělám blbě .. :(

Odpovědět 16.12.2014 17:50
Co na srdci, to na Facebooku
Avatar
mara
Člen
Avatar
mara:

Prosím nevíte někdo ?? zatím jsem na to, co dělám blbě nepřišel :(

Nahoru Odpovědět 17.12.2014 13:42
Co na srdci, to na Facebooku
Avatar
coells
Redaktor
Avatar
Odpovídá na mara
coells:

Tušil jsem, že jsi založil tohle vlákno http://www.itnetwork.cz/…490a85b4437a#… protože ti nikdo neodpovídal. Ale složitost úlohy je relativní. V tomhle případě mi trvalo asi minutu najít v tvém kódu takovou spoustu chyb, že nemělo smysl na to odpovídat :-)

Ale když už jsme u toho, začni od začátku. Udělej si jednoduchou konzolovou aplikaci a pošli si pouze jednou 1 znak. Až ti to bude fungovat, zkoušej si posílat soubory a složitější věci. Pak teprve přejdi na android a stejný kód zkoušej na něm.

A také si o tom něco načti, dělat něco bez zkušeností a navíc ještě bez znalostí je velice složité.

 
Nahoru Odpovědět 17.12.2014 19:15
Avatar
mara
Člen
Avatar
Odpovídá na coells
mara:

Dobře děkuji moc. Klasický text už mě posílat šel, ale to jsem posílal pomocí printWriter-u a toto je pomocí něčeho jiného. Toto jsem bral z jakési ukázky.

Nahoru Odpovědět 17.12.2014 19:31
Co na srdci, to na Facebooku
Avatar
mara
Člen
Avatar
mara:

za os.flush má být os.close() toho jsem si nevšiml, ale teď to pro změnu vyhodí totot
java.lang.Arra­yIndexOutOfBou­ndsException
at java.lang.Sys­tem.arraycopy(Na­tive Method)
at java.io.Buffe­redOutputStre­am.write(Buffe­redOutputStre­am.java:128)
at javaapplicati­on8.JavaAppli­cation8.main(Ja­vaApplication8­.java:43)

Nahoru Odpovědět 17.12.2014 19:51
Co na srdci, to na Facebooku
Avatar
mara
Člen
Avatar
mara:

Ahojte udělal jsem to na počítači takto:
server:

package server001;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class Server001 {
    public static void main(String[] args) throws Exception {
        Server001 server01 = new Server001();
        ServerSocket server = new ServerSocket(4444);
        server01.accept(server);
    }
    public void accept(ServerSocket ss) throws Exception{
        Socket client = ss.accept();
        InputStream is = client.getInputStream();
        FileOutputStream fos = new FileOutputStream("/home/marek/Plocha/odeslano23.txt");
        int c;
        System.out.println("posilam");
        while((c = is.read()) != -1){
            System.out.println("1");
            fos.write(c);
        }
        System.out.println("sfsdf");
        is.close();
        fos.close();
    }
}

client:

package client001;

import java.io.*;
import java.net.Socket;

public class Client001 {
    public static void main(String[] args) throws Exception {
        Socket socket = new Socket("192.168.1.13", 4444);
        OutputStream os = socket.getOutputStream();
        FileInputStream fis = new FileInputStream("/home/marek/images.jpeg");
        int i;
        while((i = fis.read()) != -1){
            os.write(i);
        }
        fis.close();
        os.flush();
        os.close();


    }
}

všechno normálně funguje, ale když jsem clienta předělal na mobil, tak se nic nepošle :(
client na mobilu vypaá takto:

button.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                Thread start = new Thread(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            Socket socket = new Socket("192.168.1.13", 4444);
                            OutputStream os = socket.getOutputStream();
                            File file = new File("/storage/sdcard0/soubor.txt");
                            FileInputStream fis = new FileInputStream(file);
                            int i;
                            int c = -1;
                            while((i = fis.read()) != c){
                                os.write(i);
                            }
                            fis.close();
                            os.flush();
                            os.close();
                        }catch(Exception e){
                            e.printStackTrace();
                        }

                    }
                });
                start.start();
            }
        });

To na počítači mi normálně funguje a to na mobilu nee :(

Nahoru Odpovědět 23.12.2014 11:37
Co na srdci, to na Facebooku
Avatar
coells
Redaktor
Avatar
Odpovídá na mara
coells:

je mobil připojený přes wi-fi na lokální síť?

 
Nahoru Odpovědět 23.12.2014 11:40
Avatar
mara
Člen
Avatar
Odpovídá na coells
mara:

ano je :) aji všechny privilégia má. a teď jsem přišel na to, že jpg soubor to pošle normálně. jen to txt nechce poslat :( nevíš jakto ??
Díky

Nahoru Odpovědět 23.12.2014 11:42
Co na srdci, to na Facebooku
Avatar
coells
Redaktor
Avatar
coells:

na server-side nemáš flush() output streamu

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět  +1 23.12.2014 11:48
Avatar
mara
Člen
Avatar
Odpovídá na coells
mara:

aha díky toho jsem si nevšiml... ale nevím jakto, ale tu fotku mi to poslalo aji bez toho
Díky moc :)

Nahoru Odpovědět 23.12.2014 11:56
Co na srdci, to na Facebooku
Avatar
coells
Redaktor
Avatar
Odpovídá na mara
coells:

Buffer na streamu má obvykle velikost 2-10 kB, pro větší data (jpg) se zapisuje automaticky. Obrázek to zdánlivě poslalo, ale stejně tam chyběla data na konci.

Jinak dobrá práce s postupným vývojem, hezky krok za krokem!

 
Nahoru Odpovědět 23.12.2014 12:04
Avatar
mara
Člen
Avatar
Odpovídá na coells
mara:

jojo :) něco jsem si o tom načetl a hned je to lepší :) předtím jsem jen tupě opisoval kód :) díky moc :) ještě, že jsi mi to předtím hned neporadil. nikdy bych to neuměl :)

Nahoru Odpovědět 23.12.2014 12:08
Co na srdci, to na Facebooku
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 12 zpráv z 12.