ファイアウォールポートのテストデバッグに使用できる推奨tcpサーバ

1983 ワード

直接コードをつけて、gccはコンパイルして、1つのパラメータを持って、つまりリスニングするポート番号が必要です.
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

#define MAXLINE 4096 /*max text line length*/
#define LISTENQ 8    /*maximum number of client connections*/

void main(int argc, char *argv[])
{
	int sockfd, portno, connfd, n;
	socklen_t clilen;
	char buf[MAXLINE];
	struct sockaddr_in cliaddr, servaddr;
	
	if (argc < 2) {
		fprintf(stderr, "[ERROR] no port number provided, usage: po portno
"); exit(1); } portno = atoi(argv[1]); //creation of the socket sockfd = socket (AF_INET, SOCK_STREAM, 0); if (sockfd < 0) { fprintf(stderr, "[ERROR] failed on opening socket
"); exit(1); } //preparation of the socket address servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY); servaddr.sin_port = htons(portno); if (bind(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0) { fprintf(stderr, "[ERROR] failed on binding
"); exit(1); } listen(sockfd, LISTENQ); printf("%s
","[INFO] server running, waiting for connections..."); for ( ; ; ) { clilen = sizeof(cliaddr); connfd = accept(sockfd, (struct sockaddr *) &cliaddr, &clilen); if (connfd < 0) { fprintf(stderr, "[ERROR] failed on accept
"); } else { printf("%s
","[INFO] received request...
"); while ((n = recv(connfd, buf, MAXLINE,0)) > 0) { printf("%s","[INFO] string received from and resent to the client:
"); puts(buf); send(connfd, buf, n, 0); } if (n < 0) { fprintf(stderr, "[ERROR] failed on read
"); exit(1); } close(connfd); } } //close listening socket close(sockfd); }

コードはGoogle検索に由来し、いくつかの修正と調整を行いました.