From f85c9b875b060681b51f57b15074ba1c7c9f5636 Mon Sep 17 00:00:00 2001 From: wangzhengquan <wangzhengquan85@126.com> Date: 星期一, 20 七月 2020 11:10:02 +0800 Subject: [PATCH] update --- queue/include/shm_socket.h | 16 -- queue/include/mod_socket.h | 37 +++++ demo/pub_sub.c | 57 +++++++++ demo/pub_sub | 0 queue/mod_socket.c | 5 demo/req_rep.c | 60 ++++++++++ demo/Makefile | 32 +++++ demo/req_rep | 0 queue/include/shm_mm.h | 13 + README.md | 86 ++++++++++++++ 10 files changed, 284 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index a611ce8..327d634 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,92 @@ ## 瀹炰緥 - 璇锋眰搴旂瓟 `./test2/server.c ./test2/client.c` + + ### 璇锋眰搴旂瓟妯″紡 + + `source ./demo/server.c` + + + + **杩愯server绔細** + + `./req_req server 8` + + **杩愯client绔細** + 鍙互鎵撳紑澶氫釜client + + `./req_rep client 8` + + 鍦╟lient绔緭鍏ヨ姹備俊鎭紝server 绔洖搴旓紝client绔緭鍑哄洖搴斾俊鎭� + + + ### 鍙戝竷璁㈤槄妯″紡 + + **杩愯server绔細** + + `./pub_sub server 8` + + + **杩愯client绔細** + 鍙互鎵撳紑澶氫釜client + + `./pub_sub client 8` + + 鍦╯erver绔緭鍏ュ彂甯冧俊鎭紝client绔緭鍑烘敹鍒扮殑璁㈤槄淇℃伅 ## 鎺ュ彛璇存槑 +``` +/** + * 鍒涘缓socket + * @return socket鍦板潃 +*/ +void *mod_open_socket(int mod); + +/** + * 鍏抽棴socket +*/ +int mod_close_socket(void * _socket); + +/** + * 缁戝畾绔彛鍒皊ocket, 濡傛灉涓嶇粦瀹氬垯绯荤粺鑷姩鍒嗛厤涓�涓� + * @return 0 鎴愬姛锛� 鍏朵粬鍊� 澶辫触鐨勯敊璇爜 +*/ +int mod_socket_bind(void * _socket, int port); + + +/** + * 鏈嶅姟绔紑鍚繛鎺ョ洃鍚� + * @return 0 鎴愬姛锛� 鍏朵粬鍊� 澶辫触鐨勯敊璇爜 + */ +int mod_listen(void * _socket); + +/** + * 瀹㈡埛绔彂璧疯繛鎺ヨ姹� + */ +int mod_connect(void * _socket, int port); + +/** + * 鍙戦�佷俊鎭� + * @return 0 鎴愬姛锛� 鍏朵粬鍊� 澶辫触鐨勯敊璇爜 + */ +int mod_send(void * _socket, const void *buf, const int size); + +/** + * 鎺ユ敹淇℃伅 + * @return 0 鎴愬姛锛� 鍏朵粬鍊� 澶辫触鐨勯敊璇爜 +*/ +int mod_recv(void * _socket, void **buf, int *size) ; + +/** + * 閲婃斁鎺ユ敹淇℃伅鐨刡uf + */ +void mod_free(void *buf); + + +/** + * 鑾峰彇soket绔彛鍙� + */ +int mod_get_socket_port(void * _socket); +``` diff --git a/demo/Makefile b/demo/Makefile new file mode 100644 index 0000000..a80c730 --- /dev/null +++ b/demo/Makefile @@ -0,0 +1,32 @@ +# +# Makefile for common library. +# +ROOT=.. +LDLIBS+=-Wl,-rpath=$(ROOT)/queue:$(ROOT)/lib +# 寮�婧愬伐鍏峰寘璺緞 +LDDIR += -L$(ROOT)/queue +# 寮�婧愬伐鍏峰寘 +LDLIBS += -lshm_queue -lusgcommon -lpthread + +INCLUDE += -I$(ROOT)/queue/ -I$(ROOT)/queue/include + +PLATFORM=$(shell $(ROOT)/systype.sh) +include $(ROOT)/Make.defines.$(PLATFORM) + + +PROGS = req_rep pub_sub + + +build: $(PROGS) + +# test1: $(LIBCOMMON) + +# 濡傛灉鍖匒 寮曠敤鍖匓锛� B 瑕佹斁鍦� A 鍚庨潰 + +clean: + rm -f $(TEMPFILES) $(PROGS) + + + +$(LIBQUEUE): + (cd $(ROOT)/queue && $(MAKE)) \ No newline at end of file diff --git a/demo/pub_sub b/demo/pub_sub new file mode 100755 index 0000000..d5a1b21 --- /dev/null +++ b/demo/pub_sub Binary files differ diff --git a/demo/pub_sub.c b/demo/pub_sub.c new file mode 100644 index 0000000..78aff69 --- /dev/null +++ b/demo/pub_sub.c @@ -0,0 +1,57 @@ +#include "mod_socket.h" +#include "shm_mm.h" +#include "usg_common.h" + + +void server(int port) { + void *socket = mod_open_socket(PUB_SUB); + mod_socket_bind(socket, port); + mod_listen(socket); + int size; + void *recvbuf; + char sendbuf[512]; + while(true) { + printf("璇疯緭鍏ュ彂甯冩秷鎭�:"); + scanf("%s", sendbuf); + mod_send(socket, sendbuf, strlen(sendbuf)+1) ; + free(recvbuf); + + } + mod_close_socket(socket); +} + +void client(int port) { + void *socket = mod_open_socket(PUB_SUB); + mod_connect(socket, port); + int size; + void *recvbuf; + + while(mod_recv(socket, &recvbuf, &size) == 0) { + printf("鏀跺埌璁㈤槄娑堟伅: %s\n", (char *)recvbuf); + free(recvbuf); + + } + mod_close_socket(socket); +} + +int main(int argc, char *argv[]) { + shm_init(512); + int port; + if (argc < 3) { + fprintf(stderr, "Usage: reqrep %s|%s <PORT> ...\n", "server", "client"); + return 1; + } + + port = atoi(argv[2]); + + if (strcmp("server", argv[1]) == 0 ) { + server(port); + } + + if (strcmp("client", argv[1]) == 0) + client(port); + + shm_destroy(); + // fprintf(stderr, "Usage: reqrep %s|%s <URL> ...\n", "server", "client"); + return 0; +} \ No newline at end of file diff --git a/demo/req_rep b/demo/req_rep new file mode 100755 index 0000000..2902e29 --- /dev/null +++ b/demo/req_rep Binary files differ diff --git a/demo/req_rep.c b/demo/req_rep.c new file mode 100644 index 0000000..5ae3133 --- /dev/null +++ b/demo/req_rep.c @@ -0,0 +1,60 @@ +#include "mod_socket.h" +#include "shm_mm.h" +#include "usg_common.h" + +void server(int port) { + void *socket = mod_open_socket(REQ_REP); + mod_socket_bind(socket, port); + mod_listen(socket); + int size; + void *recvbuf; + char sendbuf[512]; + int rv; + while ( (rv = mod_recv(socket, &recvbuf, &size) ) == 0) { + sprintf(sendbuf, "SERVER RECEIVED: %s", recvbuf); + puts(sendbuf); + mod_send(socket, sendbuf, strlen(sendbuf) + 1); + free(recvbuf); + } + mod_close_socket(socket); +} + +void client(int port) { + void *socket = mod_open_socket(REQ_REP); + mod_connect(socket, port); + int size; + void *recvbuf; + char sendbuf[512]; + while (true) { + printf("request: "); + scanf("%s", sendbuf); + mod_send(socket, sendbuf, strlen(sendbuf) + 1); + mod_recv(socket, &recvbuf, &size); + printf("reply: %s\n", (char *)recvbuf); + free(recvbuf); + } + mod_close_socket(socket); +} + + + +int main(int argc, char *argv[]) { + shm_init(512); + int port; + if (argc < 3) { + fprintf(stderr, "Usage: reqrep %s|%s <PORT> ...\n", "server", "client"); + return 1; + } + + port = atoi(argv[2]); + + if (strcmp("server", argv[1]) == 0) { + server(port); + } + + if (strcmp("client", argv[1]) == 0) + client(port); + + + return 0; +} \ No newline at end of file diff --git a/queue/include/mod_socket.h b/queue/include/mod_socket.h index 79c86c5..21498ee 100644 --- a/queue/include/mod_socket.h +++ b/queue/include/mod_socket.h @@ -17,25 +17,58 @@ }; - +/** + * 鍒涘缓socket + * @return socket鍦板潃 +*/ void *mod_open_socket(int mod); +/** + * 鍏抽棴socket +*/ int mod_close_socket(void * _socket); +/** + * 缁戝畾绔彛鍒皊ocket, 濡傛灉涓嶇粦瀹氬垯绯荤粺鑷姩鍒嗛厤涓�涓� + * @return 0 鎴愬姛锛� 鍏朵粬鍊� 澶辫触鐨勯敊璇爜 +*/ int mod_socket_bind(void * _socket, int port); +/** + * 鏈嶅姟绔紑鍚繛鎺ョ洃鍚� + * @return 0 鎴愬姛锛� 鍏朵粬鍊� 澶辫触鐨勯敊璇爜 + */ int mod_listen(void * _socket); - +/** + * 瀹㈡埛绔彂璧疯繛鎺ヨ姹� + */ int mod_connect(void * _socket, int port); +/** + * 鍙戦�佷俊鎭� + * @return 0 鎴愬姛锛� 鍏朵粬鍊� 澶辫触鐨勯敊璇爜 + */ int mod_send(void * _socket, const void *buf, const int size); +/** + * 鎺ユ敹淇℃伅 + * @return 0 鎴愬姛锛� 鍏朵粬鍊� 澶辫触鐨勯敊璇爜 +*/ int mod_recv(void * _socket, void **buf, int *size) ; +/** + * 閲婃斁鎺ユ敹淇℃伅鐨刡uf + */ void mod_free(void *buf); + +/** + * 鑾峰彇soket绔彛鍙� + */ +int mod_get_socket_port(void * _socket); + #ifdef __cplusplus } #endif diff --git a/queue/include/shm_mm.h b/queue/include/shm_mm.h index 08a839b..b32568e 100644 --- a/queue/include/shm_mm.h +++ b/queue/include/shm_mm.h @@ -5,11 +5,18 @@ extern "C" { #endif +/** + * 鍒濆鍖栧叡浜唴瀛� + * @size 鍏变韩鍐呭瓨澶у皬, 鍗曚綅M + * + */ void shm_init(int size); -void shm_destroy() ; - - +/** + * 閿�姣佸叡浜唴瀛� + * 鏁翠釜杩涚▼閫�鍑烘椂闇�瑕佹墽琛岃繖涓柟娉曪紝璇ユ柟娉曢鍏堜細妫�鏌ユ槸鍚﹁繕鏈夊叾浠栬繘绋嬪湪浣跨敤璇ュ叡浜唴瀛橈紝濡傛灉杩樻湁鍏朵粬杩涚▼鍦ㄤ娇鐢ㄥ氨鍙槸detach,濡傛灉娌℃湁鍏朵粬杩涚▼鍦ㄤ娇鐢ㄥ垯閿�姣佹暣鍧楀唴瀛樸�� + */ +void shm_destroy(); #ifdef __cplusplus } diff --git a/queue/include/shm_socket.h b/queue/include/shm_socket.h index cb09e25..8b14f06 100644 --- a/queue/include/shm_socket.h +++ b/queue/include/shm_socket.h @@ -52,23 +52,7 @@ } shm_socket_t; -/** - * 鍒濆鍖栧叡浜唴瀛� - * @size 鍏变韩鍐呭瓨澶у皬, 鍗曚綅M - * - */ -void shm_init(int size); -/** - * 閿�姣佸叡浜唴瀛� - * 鏁翠釜杩涚▼閫�鍑烘椂闇�瑕佹墽琛岃繖涓柟娉曪紝璇ユ柟娉曢鍏堜細妫�鏌ユ槸鍚﹁繕鏈夊叾浠栬繘绋嬪湪浣跨敤璇ュ叡浜唴瀛橈紝濡傛灉杩樻湁鍏朵粬杩涚▼鍦ㄤ娇鐢ㄥ氨鍙槸detach,濡傛灉娌℃湁鍏朵粬杩涚▼鍦ㄤ娇鐢ㄥ垯閿�姣佹暣鍧楀唴瀛樸�� - */ -void shm_destroy(); - -/** - * 閲婃斁recv鏂规硶鍒嗛厤鐨刡uf - */ -void shm_free(void *buf); shm_socket_t *shm_open_socket(); diff --git a/queue/mod_socket.c b/queue/mod_socket.c index a63c37d..cc358f6 100644 --- a/queue/mod_socket.c +++ b/queue/mod_socket.c @@ -55,6 +55,11 @@ return rv; } +int mod_get_socket_port(void * _socket) { + mod_socket_t * socket = (mod_socket_t *) _socket; + return socket->shm_socket->port; +} + int mod_socket_bind(void * _socket, int port){ mod_socket_t * socket = (mod_socket_t *) _socket; -- Gitblit v1.8.0