[Lisp] schrijven naar een tcp stream

Pagina: 1
Acties:

  • Ghost81
  • Registratie: September 2004
  • Laatst online: 05-02 18:39
Ik gebruik MCL (mackintosh common lisp) om een tcp verbinding te maken. Daarvoor gebruik ik de
code:
1
2
(require :opentransport)
(setq mystream (ccl::open-tcp-stream "laika" 54000))
Hierbij is "laika" een alias voor een ipadres.

Ik wil op dezelfde manier naar deze stream schrijven als in de volgende java code:
code:
1
2
3
4
5
6
7
8
    final synchronized public int   effectiveSend(String arg) throws IOException
    {
        ByteBuffer byteBuffer = ByteBuffer.wrap(arg.getBytes());
        int nbytes = channel.write(byteBuffer);
        while (byteBuffer.remaining() != 0)
            nbytes += channel.write(byteBuffer);
        return nbytes;
    }
channel is van de classe SocketChannel. Hier wordt dus een string omgezet in een ByteBuffer en die ByteBuffer wordt naar een socket gestuurd. In lisp kan ik wel zoiets doen:
code:
1
(write-line "blabla" mysocket)
en de string wordt ook netjes geaccepeerd door de server, maar die kan daar niets mee. Blijkbaar moet echt ik de ByteBuffer equivalent voor Lisp gebruiken.

De context is hier dat er een server draait op een robot waarnaar commandos gestuurd worden. De java-code bestaat al, maar het project waar ik mee bezig ben vereist dat ik hetzelfde doe in lisp. Meer informatie over de server en client staan op www.urbiforge.com. Daar staat de URBI server voor de AIBO robot en ook de client die libURBI heet (is er voor java, c++ en matlab).

Ik besef dat het misschien niet helemaal duidelijk is, maar ik begrijp het dan ook nog niet helemaal.
De vraag is: hoe zet ik het stukje java code om in lisp code?

  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 23:39
Volgens mij zit je wel aardig goed.

Waar je echter wel naar moet kijken is de encodering van die String. Java Strings gebruiken een widecharacterset met een platform afhankelijke default encoding. Mijn LISP kennis is niet echt goed te noemen, maar ik neem aan dat LISP wel een manier heeft om met een encoding om te gaan.

Overigens die synchronized in je method signature is overbodig ten aanzien van de inhoud van je methode mits de bytebuffer niet synchroon benaderd kan worden, maar dat had je zelf waarschijnlijk ook wel door.

  • Ghost81
  • Registratie: September 2004
  • Laatst online: 05-02 18:39
Mijn problemen zijn opgelost. Toch bedankt mensen.

Topic mag dicht/weg.