栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Linux回调函数客户端简单示例

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Linux回调函数客户端简单示例

syslog(LOG_INFO, ipaddr:%sn , inet_ntop(hptr- h_addrtype, hptr- h_addr, str, size)); return 0; int tcp_connect(char *IP,int PORT) if (connect_state STATE_NOCONNECTED) { struct sockaddr_in server_addr; sockfd socket(AF_INET, SOCK_STREAM, 0); if (sockfd 0) { syslog(LOG_ERR, create socket failed!n ); return -1; memset( server_addr, 0, sizeof(server_addr)); server_addr.sin_family AF_INET; server_addr.sin_port htons(PORT); server_addr.sin_addr.s_addr inet_addr(IP); if (connect(sockfd, (struct sockaddr*) server_addr, sizeof(server_addr)) 0) { syslog(LOG_ERR, connet error!n ); return -1; connect_state STATE_CONNECTED; syslog(LOG_INFO, connect success!n ); return 0; else return -1; void tcp_disconnect(void) if (connect_state ! STATE_NOCONNECTED) { close(sockfd); syslog(LOG_INFO, connect is break!n ); int tcp_send(char *buf) if (connect_state STATE_CONNECTED) { return send(sockfd, buf, strlen(buf) 1, 0); else return -1; void *thread_recv(void *param) int ret; static char buf[2048] {0}; char heartbeat_buf[] heartbeat data ; callback_param *p (callback_param *)param; struct pollfd c_poll; c_poll.fd sockfd; c_poll.events POLLIN; memset(buf, 0, sizeof(buf)); while (1) { if (connect_state STATE_CONNECTED) { ret poll( c_poll, 1, 5000); if (ret 0) { syslog(LOG_ERR, poll error!n ); break; else if (0 ret) { if (send(sockfd, heartbeat_buf, sizeof(heartbeat_buf), 0) 0) { connect_state STATE_DISCONNECTE; syslog(LOG_ERR, disconnect!n ); break; else { if (recv(sockfd, buf, sizeof(buf), 0) 0) { syslog(LOG_INFO, recv:%sn , buf); p- callback(buf, sizeof(buf)); else break; void tcp_register_callback(recv_callback cb) pthread_t recv_t; static callback_param param; param.callback cb; pthread_create( recv_t, NULL, thread_recv, (void *) param); pthread_detach(recv_t);

main.c

#include stdio.h 
#include unistd.h 
#include sys/socket.h 
#include netinet/in.h 
#include string.h 
#include arpa/inet.h 
#include hy_tcp.h 
#include hy_udp.h 
#define PORT 6000 //服务器端口号
#if 1
void r_callback(char *msg, int len) {
int main(int argc, char *argv[])
 char recv_buf[1024] {0};
 char send_buf[1024] {0};
 char str[16];
 recv_callback func r_callback;
 if(argc 2){
 printf( required parameter missingn );
 return -1;
 //tcp_dns_change(argv[1], str, sizeof(str));
 tcp_connect(argv[1],PORT);
 tcp_register_callback(func);
 while(1){
 memset(send_buf,0,sizeof(send_buf));
 printf( please input somethingn );
 scanf( %s ,send_buf);
 tcp_send(send_buf);
 tcp_disconnect();
 return 0;
#endif

编译 gcc *c -o test -lpthread

执行 ./test ip地址

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/267772.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号