C++ TCP IP SERVER CLIENT Komut gönderme

serkank

Üye
Katılım
1 Eki 2008
Mesajlar
151
Puanları
1
Yaş
39
C++ ile Multi Client Server bir program yapmak istiyorum Echo Orneği var ama bunu Komut gönderme almaya ceviremedim. Pc nizde varsa Bana boyle bir program örneği gönderebilirmisiniz yada bir link ?
 
Hangi kitaplıkları kullanıyorsun, .NET mi mfc mi yoksa klasik konsol uygulaması mı yapmaya çalışıyorsun. Hanig ide yi kullanıyorsun. Server tarafını mı client tarafını mı yapmak istiyorsun? Aşağıdaki linkte standart kitaplıklarla konsol uygulaması yapılmış işine yarayabilir. Yada üzerinde uğraştığın örneği paylaş inceleyelim.

https://www.geeksforgeeks.org/socket-programming-cc/
 
Orange Pi Zero + VisualStudio code + SSH Plugin 'i ni kullanıyorum Klasik Konsol uygulaması olucak. amacım OrangePi Zero ile Otomasyon Uygulaması yapmak .. TCP ip Uzerinden Kontak1_ON - Kontak1_OFF Şeklinde datalar gönderip Orangepi ye bağlı Röle leri açıp kapatmak.
Role Kontakları ve Bununla ilgili Kodu yaptım fakat TCP Server'ı yapamadım
Aşağındaki Echo Server Kodu ile uğraştım ama Clientten gönderdiğim Kodu Serverdan Nasıl Kontrol etmesini yapamadım . Kodun En altına Bu kodu ekledim.. Clienttan Kontak1_ON gönderiyorum ama server bunu almıyor..
// if (strcmp(buffer , 'Kontak1_ON') == 0 ){ // printf("Kodu aldı"); // }

//Example code: A simple server side code, which echos back the received message. //Handle multiple socket connections with select and fd_set on Linux #include <stdio.h> #include <string.h> //strlen #include <stdlib.h> #include <errno.h> #include <unistd.h> //close #include <arpa/inet.h> //close #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <sys/time.h> //FD_SET, FD_ISSET, FD_ZERO macros #define TRUE 1 #define FALSE 0 #define PORT 8888 int main(int argc , char *argv[]) { int opt = TRUE; int master_socket , addrlen , new_socket , client_socket[30] , max_clients = 30 , activity, i , valread , sd; int max_sd; struct sockaddr_in address; char buffer[1025]; //data buffer of 1K //set of socket descriptors fd_set readfds; //a message char *message = "ECHO Daemon v1.0 \r\n"; //initialise all client_socket[] to 0 so not checked for (i = 0; i < max_clients; i++) { client_socket[i] = 0; } //create a master socket if( (master_socket = socket(AF_INET , SOCK_STREAM , 0)) == 0) { perror("socket failed"); exit(EXIT_FAILURE); } //set master socket to allow multiple connections , //this is just a good habit, it will work without this if( setsockopt(master_socket, SOL_SOCKET, SO_REUSEADDR, (char *)&opt, sizeof(opt)) < 0 ) { perror("setsockopt"); exit(EXIT_FAILURE); } //type of socket created address.sin_family = AF_INET; address.sin_addr.s_addr = INADDR_ANY; address.sin_port = htons( PORT ); //bind the socket to localhost port 8888 if (bind(master_socket, (struct sockaddr *)&address, sizeof(address))<0) { perror("bind failed"); exit(EXIT_FAILURE); } printf("Listener on port %d \n", PORT); //try to specify maximum of 3 pending connections for the master socket if (listen(master_socket, 3) < 0) { perror("listen"); exit(EXIT_FAILURE); } //accept the incoming connection addrlen = sizeof(address); puts("Waiting for connections ..."); while(TRUE) { //clear the socket set FD_ZERO(&readfds); //add master socket to set FD_SET(master_socket, &readfds); max_sd = master_socket; //add child sockets to set for ( i = 0 ; i < max_clients ; i++) { //socket descriptor sd = client_socket[i]; //if valid socket descriptor then add to read list if(sd > 0) FD_SET( sd , &readfds); //highest file descriptor number, need it for the select function if(sd > max_sd) max_sd = sd; } //wait for an activity on one of the sockets , timeout is NULL , //so wait indefinitely activity = select( max_sd + 1 , &readfds , NULL , NULL , NULL); if ((activity < 0) && (errno!=EINTR)) { printf("select error"); } //If something happened on the master socket , //then its an incoming connection if (FD_ISSET(master_socket, &readfds)) { if ((new_socket = accept(master_socket, (struct sockaddr *)&address, (socklen_t*)&addrlen))<0) { perror("accept"); exit(EXIT_FAILURE); } //inform user of socket number - used in send and receive commands printf("New connection , socket fd is %d , ip is : %s , port : %d \n" , new_socket , inet_ntoa(address.sin_addr) , ntohs (address.sin_port)); //send new connection greeting message if( send(new_socket, message, strlen(message), 0) != strlen(message) ) { perror("send"); } puts("Welcome message sent successfully"); //add new socket to array of sockets for (i = 0; i < max_clients; i++) { //if position is empty if( client_socket[i] == 0 ) { client_socket[i] = new_socket; printf("Adding to list of sockets as %d\n" , i); break; } } } //else its some IO operation on some other socket for (i = 0; i < max_clients; i++) { sd = client_socket[i]; if (FD_ISSET( sd , &readfds)) { //Check if it was for closing , and also read the //incoming message if ((valread = read( sd , buffer, 1024)) == 0) { //Somebody disconnected , get his details and print getpeername(sd , (struct sockaddr*)&address , \ (socklen_t*)&addrlen); printf("Host disconnected , ip %s , port %d \n" , inet_ntoa(address.sin_addr) , ntohs(address.sin_port)); //Close the socket and mark as 0 in list for reuse close( sd ); client_socket[i] = 0; } //Echo back the message that came in else { //set the string terminating NULL byte on the end //of the data read buffer[valread] = '\0'; //***************************************************** // if (strcmp(buffer , 'Kontak1_ON') == 0 ){ // printf("Kodu aldı"); // } //send(sd , buffer , strlen(buffer) , 0 ); } } } } return 0; }
 

Yeni mesajlar

Forum istatistikleri

Konular
128,180
Mesajlar
915,674
Kullanıcılar
449,946
Son üye
kerim2756

Yeni konular

Geri
Üst