Add cgo-libzmq/README.md

This commit is contained in:
2025-01-22 10:22:35 +00:00
parent f42fdcb45d
commit 460d6a9633

85
cgo-libzmq/README.md Normal file
View File

@@ -0,0 +1,85 @@
# server.go
```go
package main
/*
#cgo pkg-config: libzmq
#include <zmq.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <assert.h>
#include <malloc.h>
*/
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 <zmq.h>
#include <string.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
*/
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)
}
}
```