Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : Java UDP



homer56
23-10-2006, 13:45
Hallo zusammen


Hab ein kleines Problem mit dem übermitteln per UDP. Der Client versucht immer die ganzen 1024 Bytes anzuzeigen.


Server:


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

class UDPServer
{
public static void main(String[] args)
{
byte [] buffer = new byte[1024];
String myMessage ;

try
{
// Create a Datagram Socket
DatagramSocket socket = new DatagramSocket(Integer.parseInt(args[0]));

// Create an empty Datagram Packet
DatagramPacket packet = new DatagramPacket(buffer, buffer.length );

// receive request from client and get client info
socket.receive(packet);
InetAddress client = packet.getAddress();
int client_port = packet.getPort();
System.out.println(" Received "+new String(buffer)+" from "+client);

// send some data to the client
myMessage = "Angekommen!";
buffer = myMessage.getBytes("US-ASCII") ;
packet = new DatagramPacket(buffer, buffer.length, client, client_port);
socket.send(packet);
}
catch(UnknownHostException e){ System.out.println(e); }
catch(IOException e){ System.out.println(e); }
}
}



Client:


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

class UDPClient {

public static void main (String args []) {

byte [] buffer = new byte[1024];
String host = "127.0.0.1";
int port = 666; // default: local echo service

//host = args[0];
//port = Integer.parseInt(args[1]);

try{
// Create a Datagram Socket
DatagramSocket socket = new DatagramSocket();

// Create a packet with server information
InetAddress server = InetAddress.getByName(host);
DatagramPacket packet = new DatagramPacket(buffer, buffer.length, server, port);


// Send the packet
socket.send(packet);

// receive request from client and get client info
packet = new DatagramPacket(buffer, buffer.length);
socket.receive(packet);

//InetAddress client = packet.getAddress();
//int client_port = packet.getPort();
System.out.println(new String(buffer));
}
catch(UnknownHostException e){ System.out.println(e); }
catch(IOException e){ System.out.println(e); }
}
}



Die Ausgabe vom Client:


Angekommen![][][][][][][][].....


Ausgabe vom Server:


Received[][][][][][][][][][].....


[] wird so lange angezeigt bis die 1024 Bytes verbraucht sind.


Die Rot hervorgehobenen Stellen werden wohl die Schuldigen sein, aber ich finde irgendwie nicht heraus was ich anderst machen soll.

homer56
23-10-2006, 14:21
Ok, bisschen selber denken schadet nie. :rolleyes:


Client:


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

class UDPClient {

public static void main (String args []) {

byte [] buffer = new byte[1024];
String host = "127.0.0.1";
int port = 666; // default: local echo service

//host = args[0];
//port = Integer.parseInt(args[1]);

try{
// Create a Datagram Socket
DatagramSocket socket = new DatagramSocket();

// Create a packet with server information

String myMessage = "Antworte mir!!!!!!!!!";
buffer = myMessage.getBytes("US-ASCII");

InetAddress server = InetAddress.getByName(host);
DatagramPacket packet = new DatagramPacket(buffer, buffer.length, server, port);

// Send the packet
socket.send(packet);
buffer = new byte[1024];
// receive request from client and get client info
packet = new DatagramPacket(buffer, buffer.length);
socket.receive(packet);


// output of the data from server
System.out.println(new String(buffer).trim());

}
catch(UnknownHostException e){ System.out.println(e); }
catch(IOException e){ System.out.println(e); }
}
}

homer56
03-11-2006, 12:31
Guten Tag


Hab nun mal das Ganze in Klassen und Methoden verpackt. Nun bekomme ich einen Fehler wo ich nicht wirklich weiss wo ich ihn suchen muss.


Code:


//************************************************** ****//
// usage: java UDPClient port
//************************************************** ****//

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

class UDPClient {
public static void main (String args []) {

networkStuff connection1 = new networkStuff();
connection1.setOptionsAndSendPacket(7, "127.0.0.1");
connection1.recivePacket();
}
}


class networkStuff{

protected byte [] buffer = new byte[1024];
protected DatagramPacket packet;
protected DatagramSocket socket;

void setOptionsAndSendPacket(int port, String host){
try{
// Create a Datagram Socket
DatagramSocket socket = new DatagramSocket();

// Create a packet with server information
String myMessage = "Sende Request!";
buffer = myMessage.getBytes("US-ASCII");

// Set host and port
InetAddress server = InetAddress.getByName(host);
DatagramPacket packet = new DatagramPacket(buffer, buffer.length, server, port);

// Send the packet and reset the buffer
socket.send(packet);
buffer = new byte[1024];
}

catch(UnknownHostException e){ System.out.println(e); }
catch(IOException e){ System.out.println(e); }
}

void recivePacket(){

// receive request from client and get client info
try {
packet = new DatagramPacket(buffer, buffer.length);
socket.receive(packet);

// output the data from the server
System.out.println(new String(buffer).trim());
}
catch (IOException e) {System.out.println(e);}
}
}


Fehler beim Starten:


java.lang.NullPointerException
at networkStuff.recivePacket(UDPClient.java:51)
at UDPClient.main(UDPClient.java:13)
Exception in thread "main"


Wäre echt super wenn mir jemand nen Tipp geben könnte.


Edit:


private InetAddress server;

private DatagramSocket socket;

private DatagramPacket packet;

Hinzufügen bringt den gleichen Fehler. :(

anda_skoa
03-11-2006, 14:27
Der Backtrace sagt dir doch eh die Zeile.

socket dürfte null sein, vermutlich deswegen, weil nie eine Zusweisung auf diese Variable passiert (zumindest nicht im geposteten Code)

Vermutung: die lokale Variable socket in setOptionsAndSendPacket sollte vermutlich die Variable der Instanz sein

Ciao,
_