2024年1月13日发(作者:)
if (FD_ISSET(master_socket, &rdset)) { if (master_socket == server_socket) { /* A client is asking a new connection */ socklen_t addrlen; struct sockaddr_in clientaddr; int newfd;
/* Handle new connections */ addrlen = sizeof(clientaddr); memset(&clientaddr, 0, sizeof(clientaddr)); newfd = accept(server_socket, (struct sockaddr *)&clientaddr, &addrlen); if (newfd == -1) { perror("Server accept() error"); } else { FD_SET(newfd, &refset); if (newfd > fdmax) { /* Keep track of the maximum */ fdmax = newfd; } printf("New connection from %s:%d on socket %dn", inet_ntoa(_addr), _port, newfd); } } else { /* An already connected master has sent a new query */ uint8_t query[MODBUS_TCP_MAX_ADU_LENGTH]; int data = 0; int address=0;
modbus_set_socket(ctx, master_socket); rc = modbus_receive(ctx, query);
address = (query[header_length+1]<<8) + query[header_length+2]; if(query[header_length] == 0x06 ) { //to do
功能码
写保持寄存器 }
if (rc != -1) { modbus_reply(ctx, query, rc, mb_mapping); } else { /* Connection closed by the client, end of server */ printf("Connection closed on socket %dn", master_socket); close(master_socket);
/* Remove from reference set */ FD_CLR(master_socket, &refset);
if (master_socket == fdmax) { fdmax--; } } } } }
{
if (FD_ISSET(master_socket, &rdset)) { if (master_socket == server_socket) { /* A client is asking a new connection */ socklen_t addrlen; struct sockaddr_in clientaddr; int newfd;
/* Handle new connections */ addrlen = sizeof(clientaddr); memset(&clientaddr, 0, sizeof(clientaddr)); newfd = accept(server_socket, (struct sockaddr *)&clientaddr, &addrlen); if (newfd == -1) { perror("Server accept() error"); } else { FD_SET(newfd, &refset); if (newfd > fdmax) { /* Keep track of the maximum */ fdmax = newfd; } printf("New connection from %s:%d on socket %dn", inet_ntoa(_addr), _port, newfd); } } else { /* An already connected master has sent a new query */ uint8_t query[MODBUS_TCP_MAX_ADU_LENGTH]; int data = 0; int address=0;
modbus_set_socket(ctx, master_socket); rc = modbus_receive(ctx, query);
address = (query[header_length+1]<<8) + query[header_length+2]; if(query[header_length] == 0x06 ) { //to do
功能码
写保持寄存器 }
if (rc != -1) { modbus_reply(ctx, query, rc, mb_mapping); } else { /* Connection closed by the client, end of server */ printf("Connection closed on socket %dn", master_socket); close(master_socket);
/* Remove from reference set */ FD_CLR(master_socket, &refset);
if (master_socket == fdmax) { fdmax--; } } } }
struct sockaddr_in clientaddr; int newfd;
/* Handle new connections */ addrlen = sizeof(clientaddr); memset(&clientaddr, 0, sizeof(clientaddr)); newfd = accept(server_socket, (struct sockaddr *)&clientaddr, &addrlen); /*Record the first time a link descriptor*/ if(m_bNewfd) { m_iNewfd = newfd; m_bNewfd = false; } if(m_iNewfd != newfd ) {
/* Connection closed by the client, end of server */
close(m_iNewfd);
/* Remove from reference set */ FD_CLR(m_iNewfd, &refset); m_iNewfd = newfd; printf(" accept -->Connection closed on socket %dn", m_iNewfd); } if (newfd == -1) { printf("Server accept() error"); } else {
FD_SET(newfd, &refset); if (newfd > fdmax) { /* Keep track of the maximum */ fdmax = newfd; } printf("New connection from %s:%d on socket %dn", inet_ntoa(_addr), _port, newfd); } } else { /* An already connected master has sent a new query */ uint8_t query[MODBUS_TCP_MAX_ADU_LENGTH];
modbus_set_socket(ctx, m_iNewfd); rc = modbus_receive(ctx, query);
if (rc != -1) { //zx add processing data bConnect = true; modbus_reply(ctx, query, rc, mb_mapping); uint8_t* temp_rec_buf; uint8_t* temp_send_buf; int temp_nSendLen =0; int temp_nRecLen =0; BYTE ok_send_buf[300]; BYTE ok_recv_buf[300]; ZeroMemory(ok_send_buf, sizeof(ok_send_buf)); ZeroMemory(ok_recv_buf, sizeof(ok_recv_buf));


发布评论