Commit 4150c40e authored by Lars Gierth's avatar Lars Gierth
Browse files

Fix hosts example

Showing with 47 additions and 35 deletions
+47 -35
# libp2p host example
## What this does
This example can be started in either listen mode, or dial mode.
When running as a listener, it will sit and wait for incoming connections on
the `/hello/1.0.0` protocol. Whenever it receives a stream, it will
write the message "hello libp2p" over the stream and close it.
When run in dial mode, the node will start up, connect to the given
address, open a stream to the target peer, and read a message on the
protocol `/hello/1.0.0`
## Building
# Echo client/server with libp2p
This example can be started in either listen mode (server), or dial mode (client).
In listen mode, it will sit and wait for incoming connections on
the `/echo/1.0.0` protocol. Whenever it receives a stream, it will
write whatever message it received, and close the stream.
In dial mode, it will connect to the target peer on the given address.
It then opens a stream, writes a short message on the same protocol,
and print whatever reply it receives.
## Build
```
$ go build
> make deps
> go build ./examples/hosts
```
## Usage
In one terminal:
```
$ ./hosts -l 4737
> ./hosts -l 4737
2016/11/06 04:37:00 I am /ip4/127.0.0.1/tcp/4737/ipfs/QmXzbaXtBw6mU29WoeYrCtcRLVbT8asWCcEFVuDy4w6pdq
2016/11/06 04:37:00 listening for connections
2016/11/06 04:37:01 got a new stream
2016/11/06 04:37:01 read request: "Hello, world!"
```
In another, copy the address printed by the listener and do:
```
$ ./hosts -d ADDRESS
> ./hosts -d /ip4/127.0.0.1/tcp/4737/ipfs/QmXzbaXtBw6mU29WoeYrCtcRLVbT8asWCcEFVuDy4w6pdq
2016/11/06 04:37:01 I am /ip4/127.0.0.1/tcp/0/ipfs/QmeMNYMmkgoyd8M7y925r4yVVDjKtiYtU4rNCyj7wDWzk1
2016/11/06 04:37:01 connecting to target
2016/11/06 04:37:01 opening stream
2016/11/06 04:37:01 read reply: "Hello, world!"
>
```
......@@ -67,7 +67,7 @@ func main() {
flag.Parse()
listenaddr := fmt.Sprintf("/ip4/0.0.0.0/tcp/%d", *listenF)
listenaddr := fmt.Sprintf("/ip4/127.0.0.1/tcp/%d", *listenF)
ha, err := makeDummyHost(listenaddr, *secio)
if err != nil {
......@@ -76,12 +76,13 @@ func main() {
// Set a stream handler on host A
ha.SetStreamHandler("/echo/1.0.0", func(s net.Stream) {
log.Println("Got a new stream!")
log.Println("got a new stream")
doEcho(s)
defer s.Close()
})
if *target == "" {
log.Println("listening for connections...")
log.Println("listening for connections")
select {} // hang forever
}
......@@ -117,15 +118,15 @@ func main() {
log.Fatalln(err)
}
log.Println("opening stream...")
log.Println("opening stream")
// make a new stream from host B to host A
// it should be handled on host A by the handler we set
s, err := ha.NewStream(context.Background(), peerid, "/hello/1.0.0")
s, err := ha.NewStream(context.Background(), peerid, "/echo/1.0.0")
if err != nil {
log.Fatalln(err)
}
_, err = s.Write([]byte("Hello world of peer two peer"))
_, err = s.Write([]byte("Hello, world!"))
if err != nil {
log.Fatalln(err)
}
......@@ -135,23 +136,21 @@ func main() {
log.Fatalln(err)
}
log.Println("GOT: ", string(out))
log.Printf("read reply: %q\n", out)
}
func doEcho(s inet.Stream) {
buf := make([]byte, 1024)
for {
n, err := s.Read(buf)
if err != nil {
log.Println(err)
return
}
n, err := s.Read(buf)
if err != nil {
log.Println(err)
return
}
log.Printf("read data: %q\n", buf[:n])
_, err = s.Write(buf[:n])
if err != nil {
log.Println(err)
return
}
log.Printf("read request: %q\n", buf[:n])
_, err = s.Write(buf[:n])
if err != nil {
log.Println(err)
return
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment