Esempio n. 1
0
int main(int argc, char** argv)
{


	int serverSocket;	//Socket descriptor for server
	int clientSocket;	//Socket descriptor for client

	struct sockaddr_in echoServerAddr;	//local address
	struct sockaddr_in echoClientAddr;	//client address

	unsigned short echoServerPort;	//server port
	unsigned int clientLen;			//length of client address data structure

	// if(argc != 2){
	// 	fprintf(stderr, "Usage %s <Server Port>\n", argv[0]);
	// 	exit(1);
	// }

	echoServerPort = PORT;

	//create socket for incoming connections
	if((serverSocket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0){
		dieWithError("socket() failed");
	}

	//construct local address structure
	memset(&echoServerAddr, 0, sizeof(echoServerAddr));	//zero out structure
	echoServerAddr.sin_family = AF_INET;					//internet address family
	echoServerAddr.sin_addr.s_addr = htonl(INADDR_ANY); //any incoming interface
	echoServerAddr.sin_port = htons(echoServerPort);	//local port

	//bind to the local address
	if(bind(serverSocket, (struct sockaddr*)&echoServerAddr, sizeof(echoServerAddr)) < 0){
		dieWithError("bind() failed");
	}

	//mark the socket so it will listen for incoming connections
	if(listen(serverSocket, MAXPENDING) < 0){
		dieWithError("listen() failed");
	}

		//set the size of the in-out parameter
		clientLen = sizeof(echoClientAddr);

		//wait for client to connect
		if((clientSocket = accept(serverSocket, (struct sockaddr*)&echoClientAddr, &clientLen)) < 0){
			dieWithError("accept() failed");
		}

		//clientSocket is connected to a client
		printf("Handling client %s\n", inet_ntoa(echoClientAddr.sin_addr));
		handleTCPClient(clientSocket);
	
}
Esempio n. 2
0
int main( int argc, char **argv ) {
  typedef enum Boolean { false, true } Boolean;

  Boolean finished = false;
  char buffer[1024];
  in_port_t listenPort;
  int serverSock;
  static const char *version = "0.0.1";
  static const char *phase = "prealpha";
  struct sockaddr_in serverAddr;

  if (argc != 2) usage(argv[0]);
  listenPort = atoi(argv[1]);

  printf("tcpserver -- TCP-based protocol development harness (server) v%s-%s\n", version, phase);
  printf("Written by [email protected] -- Released under BSD3\n\n");

  if ((serverSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) error("socket()");
  memset(&serverAddr, 0, sizeof(serverAddr));
  serverAddr.sin_family = AF_INET;
  serverAddr.sin_addr.s_addr = htonl(INADDR_ANY);
  serverAddr.sin_port = htons(listenPort);

  if (bind(serverSock, (struct sockaddr *) &serverAddr, sizeof(serverAddr)) < 0) sysError("bind()");
  if (listen(serverSock, _TCPDEV_MAXCONN) < 0) sysError("listen()");

  while (!finished) {
    struct sockaddr_in clientAddr;
    socklen_t clientAddrLength = sizeof(clientAddr);
    int clientSock = accept(serverSock, (struct sockaddr *) &clientAddr, &clientAddrLength);
    if (clientSock < 0) sysError("accept()");

    char clientName[INET_ADDRSTRLEN];
    if (inet_ntop(AF_INET, &clientAddr.sin_addr.s_addr, clientName, sizeof(clientName)) != NULL) {
      printf("[+] inbound client: %s:%d\n", clientName, ntohs(clientAddr.sin_port));
    } else {
      printf("cannot get client address\n");
    }

    handleTCPClient(clientSock);
  }

  return 0;
}