Seite 1 von 1

Problem: Python + Corba + Filetransfer

Verfasst: Samstag 23. Dezember 2006, 12:33
von fr3sh
Hallo,
ich muss für meine Vorlesung einen Chatserver auf CORBA Basis programmieren.
Alle Funktionen habe ich schon implementiert.
Jetzt benötige ich noch einen Filetransfer vom Client zum Server. Ich möchte Bilder übers Netzwerk mit Hilfe von Corba übertragen.

Dateien werden als Binary File geöffnet und in einen String umgewandelt.
Der String wird dann per RPC an den Server übertragen.

es kommt folgende Fehlermeldung, mit der ich nichts anfangen kann:

Code: Alles auswählen

TypeError: argument must be string without null bytes, not str

Mache ich das gleiche in einem Programm ohne Corba, funktioniert es problemlos.


meine IDL Datei:

Code: Alles auswählen

module Chat {
	interface ChatServer {
		long sign_on(in string name);
		void sign_off(in long clientid);
		string get_new_messages(in long clientid);
		void write_message(in long clientid, in string message);
		string get_userlist(in string separator);
		void send_file(in long clientid, in string file);
		string get_file(in string username);
	};
};
Datei auslesen und senden (Client):

Code: Alles auswählen

def getbinaryfileasstring(name):
	inp = open(name, "rb")
	dateistring = ""
	for line in inp:
		dateistring += line
	return dateistring

o.send_file(myid, getbinaryfileasstring("test.png"))

Implementierung auf Serverseite:

Code: Alles auswählen

def send_file(self, clientid, stringfile):
	tempuser = get_user_from_list(clientid)
	filename = self.filepath + tempuser.get_clientid() + ".png"
	outp = open(filename, "wb")
	outp.write(stringfile)
	outp.close()

Kann mir jemand helfen?? :-)

danke schon mal


ciao, fr3sh

Re: Problem: Python + Corba + Filetransfer

Verfasst: Samstag 23. Dezember 2006, 15:06
von BlackJack
fr3sh hat geschrieben:es kommt folgende Fehlermeldung, mit der ich nichts anfangen kann:

Code: Alles auswählen

TypeError: argument must be string without null bytes, not str
CORBA-Zeichenketten dürfen keine Nullbytes enthalten. Für beliebige binäre Daten muss man den CORBA-Typ `octet` benutzen.

Verfasst: Mittwoch 27. Dezember 2006, 09:31
von fr3sh
ah.... danke darauf bin ich noch garnicht gekommen.


Komisch kam mir nur immer vor, dass das ganze ohne Corba geklappt hat.

Ich teste es dann gleich mal :-)