stream UDP

0

Witam, mam napisać program sieciowy, który będzie stremował obraz video poprzez pakiety UDP. Pomysłodwaca nie dał mi jednak żadnych wskazówek, zero koncepcji. Dajac to ze raczkuje w javie to robi sie malo fajny pasztet. Dlatego tez mam do was kilka wstepnych pytan. Od czego zaczac? Jak by miala wygladac koncepcja na taki program?

Ja mysle tak: Mamy klienta A ktory porozumiewa sie z jakims B (czyli klient klient) bez opcji serwer.
Mamy templatke i teraz co? Stream z linka w necie? stream z dysku?(chyba najrosadniejsze)?
Czyli nasza templatka jakis textbox(tu bedzie jakas dana o video) i buton wysylajacy do drugiego. + okienko otwarzania. Drugi klient to samo. Tylko jednoczesnie jeden moze stremowac video.

Tylko teraz czy moja koncepcja jest sluszna?
O co chodzi z tym UDP?
Czy jest jakis sprytny poradnik na necie dotyczacy tego polecenia? lub przynajnmniej madry tutorial zwiazany z programowaniem sieciowym ktory byscie polecili zeby rozwiazac to zagadnienie?

0

W internecie wyszukalem jakies programy na podstawie mam to co ponizej( to co podales tez znalazlem) nie w tym problem. Chyba mam program o kotry mi chodzi do modyfikacji drobnej ale.. zainstalowalem eclipse zrobilem nowy projekt dwie klasy jak ponizej klikam play i nic sie nie dzieje? o co chodzi? oswieci mnie ktos z dzialaniem tego kodu?

UDPserwer:

package projekt;

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

@SuppressWarnings("unused")
class UDPServer
{
   public static void main(String args[]) throws Exception
      {
         DatagramSocket serverSocket = new DatagramSocket(9876);
            byte[] receiveData = new byte[1024];
            byte[] sendData = new byte[1024];
            while(true)
               {
                  DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
                  serverSocket.receive(receivePacket);
                  String sentence = new String( receivePacket.getData());
                  System.out.println("RECEIVED: " + sentence);
                  InetAddress IPAddress = receivePacket.getAddress();
                  int port = receivePacket.getPort();
                  String capitalizedSentence = sentence.toUpperCase();
                  sendData = capitalizedSentence.getBytes();
                  DatagramPacket sendPacket =
                  new DatagramPacket(sendData, sendData.length, IPAddress, port);
                  serverSocket.send(sendPacket);
               }
      }
} 

UDPklient:

package projekt;

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

class UDPklient
{
   public static void main(String args[]) throws Exception
   {
      BufferedReader inFromUser =
         new BufferedReader(new InputStreamReader(System.in));
      DatagramSocket clientSocket = new DatagramSocket();
      InetAddress IPAddress = InetAddress.getByName("localhost");
      byte[] sendData = new byte[1024];
      byte[] receiveData = new byte[1024];
      String sentence = inFromUser.readLine();
      sendData = sentence.getBytes();
      DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9876);
      clientSocket.send(sendPacket);
      DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
      clientSocket.receive(receivePacket);
      String modifiedSentence = new String(receivePacket.getData());
      System.out.println("FROM SERVER:" + modifiedSentence);
      clientSocket.close();
   }
} 
0

Zacznij może od nauki podstaw javy? Uruchom łaskawie OBA programy (bo to są dwa programy...) i zobacz co się będzie działo...

0

Dostajesz jakiś błąd?
Zgadzam się z przedmówcą to są dwa rożne programy

0

http://www.binarytides.com/udp-socket-programming-in-java/

Wydaje mi sie ze to jest blizsze mojemu poleceniu, robilem glupi blad ze nie podzielilem osobno na klient serwer.
Tylko teraz jak to przerobic na stream video w javie?
Jakie sa funkcje do tego sluzace?

Jesli mi sie wydaje dobrze to w linku kotry podalem obecnie pakiet jest wysylany na localhost i wraca(taka ramka UDP) cos w tym stylu. Czyli ja powinienem zmienic zeby szlo video i wrocilo? Tylko czy moze isc na lh wlasnie? Czy przejdzie to jesli nie bedzie to aplikacja web? i jak to wykonac?(jakis tut)?

0

znalazlem takie cos

URL url = new URL("https://www.google.com/robots.txt");             
                InputStream stream = url.openStream();
                BufferedReader reader = new BufferedReader(
                		new InputStreamReader(stream));
                String line = reader.readLine();
                while (line !=null)
                {
                	System.out.println(line);
                	line = reader.readLine();
                }
                System.out.println("Done");

ale jest to tylko dla plikow txt , przy mp4/avi juz nie chce dzialac jak to przerobic?

0

Bez zewnętrznej biblioteki raczej tego nie zrobisz.
Znowu wujek google....

0

o czym powinienem czytać?

0

SERWER:

package test1;



import java.io.*;
import java.io.FileOutputStream;
import java.net.*;

public class udp_server
{
public static void main(String args[])
{
    DatagramSocket sock = null;
     
    try
    {
        //1. creating a server socket, parameter is local port number
        sock = new DatagramSocket(7777);
         
        //buffer to receive incoming data
        byte[] buffer = new byte[65536];
        DatagramPacket incoming = new DatagramPacket(buffer, buffer.length);
         
        //2. Wait for an incoming data
        echo("Server socket created. Waiting for incoming data...");
         
        //communication loop
        while(true)
        {
            sock.receive(incoming);
            byte[] data = incoming.getData();
            String s = new String(data, 0, incoming.getLength());
             
            //echo the details of incoming data - client ip : client port - client message
            echo(incoming.getAddress().getHostAddress() + " : " + incoming.getPort() + " - " + s);
             
            s = "OK : " + s;
            
           
            
            
            DatagramPacket dp = new DatagramPacket(s.getBytes() , s.getBytes().length , incoming.getAddress() , incoming.getPort());
            sock.send(dp);
            
            File file = new File("C:/INNE/test.mp4");
            FileOutputStream fos = new FileOutputStream(file);  
            DatagramPacket rpacket = new DatagramPacket(buffer, buffer.length);

               while (true) {
            	   sock.receive(rpacket);
                   fos.write(rpacket.getData(), 0, rpacket.getLength());
               }
        }
    }
     
    catch(IOException e)
    {
        System.err.println("IOException " + e);
    }
}
 
//simple function to echo data to terminal
public static void echo(String msg)
{
    System.out.println(msg);
}
}

KLIENT:

package test2;

import java.io.*;

import java.net.*;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.BufferedWriter; 
import java.io.InputStreamReader; 

public class udp_client
{
    public static void main(String args[])
    {
        DatagramSocket sock = null;
        int port = 7777;
        String s;
         
        BufferedReader cin = new BufferedReader(new InputStreamReader(System.in));
         
        try
        {
            sock = new DatagramSocket();
             
            InetAddress host = InetAddress.getByName("localhost");
             
            while(true)
            {
                //take input and send the packet
                echo("Enter message to send : ");
                s = (String)cin.readLine();
                byte[] b = s.getBytes();
                 
                DatagramPacket  dp = new DatagramPacket(b , b.length , host , port);
                sock.send(dp);
                 
                //now receive reply
                //buffer to receive incoming data
                byte[] buffer = new byte[65536];
                DatagramPacket reply = new DatagramPacket(buffer, buffer.length);
                sock.receive(reply);
                 
                byte[] data = reply.getData();
                s = new String(data, 0, reply.getLength());
                 
                //echo the details of incoming data - client ip : client port - client message
                
//                URL url = new URL("https://www.google.com/robots.txt");             
//                InputStream stream = url.openStream();
//                BufferedReader reader = new BufferedReader(
//                		new InputStreamReader(stream));
//                String line = reader.readLine();
//                while (line !=null)
//                {
//                	System.out.println(line);
//                	line = reader.readLine();
//                }
//                System.out.println("Done");
                
                
                echo(reply.getAddress().getHostAddress() + " : " + reply.getPort() + " - " + s);
                echo("dupa");
                
                
                File file = new File("C:/INNE/test.mp4");
                FileInputStream fis = new FileInputStream(file);
                DatagramPacket pack;


                int size = 0;
               

                while (true) {
                    size = fis.read(buffer);                
                    pack = new DatagramPacket(buffer, buffer.length);
                    sock.send(pack);
                }
                
            }
        }
         
        catch(IOException e)
        {
            System.err.println("IOException " + e);
        }
    }
     
    //simple function to echo data to terminal
    public static void echo(String msg)
    {
        System.out.println(msg);
    }
}

Prosił bym o wskazanie co jest nie tak w moim kodzie. Powtarzam w programie chodzi o stream video z uzyciem UDP.
Wydaje mi sie ze bleblujac internet cos chociaz podobnego tworze, lecz na ta chwile jest taki blad:

w kliencie:

Exception in thread "main" java.lang.NullPointerException: null address || null buffer
	at java.net.DualStackPlainDatagramSocketImpl.send(Unknown Source)
	at java.net.DatagramSocket.send(Unknown Source)
	at test2.udp_client.main(udp_client.java:79)

zas po wlaczeniu serwera jest:
"Server socket created. Waiting for incoming data..."
wiec chyba dziala..

Jeszcze raz prosze o wskazowki, poprawe i dziekuje za wszelka pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1