I created a C server and a java client. I was sending a command like ls through the client and server should execute it. However read in c server is still waiting for input. how to solve this problem.
Java client
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.net.Socket; import java.util.Scanner; class HelloWorld { public static void main(String... abc) { try { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Enter ip and port : "); String ip ; String p; String ss; int port; ip = br.readLine(); p = br.readLine(); port = Integer.parseInt(p); Socket s = new Socket(ip,port); OutputStream os = s.getOutputStream(); PrintWriter pw = new PrintWriter(os); Scanner in = new Scanner(System.in); ss = in.nextLine(); pw.print(s); pw.flush(); pw.close(); } catch(Exception e){ System.out.println("ERROR!!!");} } } here is the c server.
#include"Headers.h" void comm(char * s_port) { int sockfd, newsockfd, portno; socklen_t clilen; char buffer[MAXBUFFER]; char newbuffer[MAXBUFFER]; char var[MAXBUFFER] = " > file.txt"; int n; struct sockaddr_in serv_addr, cli_addr; FILE *fp = NULL; sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd < 0) error("ERROR opening socket"); bzero((char *) &serv_addr, sizeof(serv_addr)); portno = atoi(s_port); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = INADDR_ANY; serv_addr.sin_port = htons(portno); if (bind(sockfd, (struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0) error("ERROR on binding"); listen(sockfd,5); clilen = sizeof(cli_addr); newsockfd = accept(sockfd,(struct sockaddr *) &cli_addr,&clilen); if (newsockfd < 0) error("ERROR on accept"); while (1) { bzero(buffer,1024); n = read(newsockfd,buffer,1024); if (strcmp(buffer , "exit\n") == 0) break; if (n < 0) error("ERROR reading from socket"); printf("Here is the message: %s\n",buffer); strcpy(newbuffer,""); if (buffer[strlen(buffer) - 1] == '\n') buffer[strlen(buffer) - 1] = '\0'; strcat(newbuffer, buffer); strcat(newbuffer, var); printf("%s",newbuffer); system(newbuffer); break; if (n < 0) error("writing to socket"); } close(newsockfd); close(sockfd); }
include "Headers.h"