linux 通訊幾例

//服務器端
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/wait.h>
#define MYPORT 5999
#define BACKLOG 10

int main(){
	int sock_fd, new_fd;
	struct sockaddr_in my_addr, their_addr;
	int sin_size;
	if((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1){
		perror("socket");
		exit(1);
	}
	my_addr.sin_family = AF_INET;
	my_addr.sin_port = htons(MYPORT);
	my_addr.sin_addr.s_addr = INADDR_ANY;
	bzero(&(my_addr.sin_zero), 8);
	if(bind(sock_fd, (struct sockaddr*)&my_addr, sizeof(struct sockaddr)) == -1){
		perror("bind");
		exit(1);
	}
	if(listen(sock_fd, BACKLOG) == -1){
		perror("listen");
		exit(1);
	}
	while(1){
		sin_size = sizeof(struct sockaddr_in);
		if((new_fd = accept(sock_fd, (struct sockaddr *)&their_addr, &sin_size)) == -1){
			perror("accept");
			continue;
		}
		printf("server.got connection from %s\n",inet_ntoa(their_addr.sin_addr));
		if(!fork()){
			if(send(new_fd, "Hello,world!\n", 14, 0) == -1){
				perror("send");
				close(new_fd);
				exit(0);
			}
		}
		while(waitpid(-1, NULL, WNOHANG) > 0);
	}
}
//簡單客戶端
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#define PORT 5999
#define MAXDATASIZE 100
int main(int argc, char *argv[]){
    int sockfd, numbytes;
    char buf[MAXDATASIZE];
    struct hostent *he;
    struct sockaddr_in their_addr;
    if(argc != 2){
        fprintf(stderr, "usage: client hostname\n");
        exit(1);
    }
    if((he = gethostbyname(argv[1])) == NULL){
        perror("gethostbyname");
        exit(1);
    }
//    printf();
    if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1){
        perror("socket");
        exit(1);
    }
    their_addr.sin_family = AF_INET;
    their_addr.sin_port = htons(PORT);
    //their_addr.sin_addr = *((struct in_addr*)he->h_addr);
    their_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
    bzero(&(their_addr.sin_zero), 8);
    if(connect(sockfd, (struct sockaddr *)&their_addr, sizeof(struct sockaddr)) == -1){
        perror("connect");
        exit(1);
    }
    if((numbytes = recv(sockfd, buf, MAXDATASIZE, 0)) == -1){
        perror("recv");
        exit(1);
    }
    buf[numbytes] = '\0';
    printf("Received: %s", buf);
    close(sockfd);
    return 0;
}
相關文章
相關標籤/搜索