diff --git a/cgo-libzmq/README.md b/cgo-libzmq/README.md new file mode 100644 index 0000000..e63e4a3 --- /dev/null +++ b/cgo-libzmq/README.md @@ -0,0 +1,85 @@ +# server.go +```go +package main + +/* +#cgo pkg-config: libzmq +#include +#include +#include +#include +#include +#include +*/ +import "C" +// sudo apt-get install libzmq3-dev +import ( + "unsafe" + "fmt" +) + +func main() { + context := C.zmq_ctx_new() + defer C.zmq_ctx_destroy(context) + + responder := C.zmq_socket(context, C.ZMQ_REP) + defer C.zmq_close(responder) + + rc := C.zmq_bind(responder, C.CString("tcp://*:5555")) + if rc != 0 { + panic("Failed to bind socket") + } + + for { + buffer := make([]byte, 10) + C.zmq_recv(responder, unsafe.Pointer(&buffer[0]), 10, 0) + fmt.Println("Received Hello") + C.sleep(1) + message := unsafe.Pointer(C.CString("World")) + defer C.free(message) + C.zmq_send(responder, message, 5, 0) + } +} +``` + +# client.go +```go +package main +/* +#cgo pkg-config: libzmq +#include +#include +#include +#include +#include +*/ +import "C" +import ( + "fmt" + "unsafe" +) + +func main(){ + fmt.Println("Connecting to hello world server…") + + context := C.zmq_ctx_new() + defer C.zmq_ctx_destroy(context) + + requester := C.zmq_socket(context, C.ZMQ_REQ) + defer C.zmq_close(requester) + + C.zmq_connect(requester, C.CString("tcp://localhost:5555")) + + // for request_nbr := range 10 { + + for request_nbr := 0; request_nbr < 10; request_nbr++ { + buffer := make([]byte, 10) + fmt.Printf("Sending Hello %d...\n", request_nbr) + msg := unsafe.Pointer(C.CString("Hello")) + defer C.free(msg) + C.zmq_send(requester, msg, 5, 0); + C.zmq_recv(requester, unsafe.Pointer(&buffer[0]), 10, 0); + fmt.Printf("Received World %d\n", request_nbr) + } +} +``` \ No newline at end of file