C语言实现TCP通信

来源:互联网 发布:为知笔记产品经理 招聘 编辑:程序博客网 时间:2024/04/20 03:41

服务器端:

#include <sys/types.h>#include <sys/socket.h>#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <string.h>#include <unistd.h>#include <netinet/in.h>#define SERVPORT 3333#define BACKLOG 10#define MAX_CONNECTED_NO 10#define MAXDATASIZE 5int main() {    struct sockaddr_in server_sockaddr, client_sockaddr;    int sin_size, recvbytes;    int sockfd, client_fd;    char buf[MAXDATASIZE];        if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {        perror("socket");        exit(1);    }    printf("socket success! sockfd = %d\n", sockfd);        server_sockaddr.sin_family = AF_INET;    server_sockaddr.sin_port = htons(SERVPORT);    server_sockaddr.sin_addr.s_addr = INADDR_ANY;    bzero(&(server_sockaddr.sin_zero), 8);        if(bind(sockfd, (struct sockaddr *)&server_sockaddr, sizeof(struct sockaddr)) == -1) {        perror("bind");        exit(1);    }    printf("bind success!\n");        if(listen(sockfd, BACKLOG) == -1) {        perror("listen");        exit(1);    }    printf("listening!\n");        if((client_fd = accept(sockfd, (struct sockaddr *)&client_sockaddr, &sin_size)) == -1) {        perror("accept");        exit(1);    }        if((recvbytes = recv(client_fd, buf, MAXDATASIZE, 0)) == -1) {        perror("recv");        exit(1);    }    //cout << "received a connection: " << buf << endl;    close(sockfd);    return 0;}

客户端:

#include <stdio.h>#include <errno.h>#include <string.h>#include <netdb.h>#include <sys/types.h>#include <netinet/in.h>#include <sys/socket.h>#define SERVPORT 3333#define MAXDATASIZE 100int main(int argc, char *argv[]) {    int sockfd, sendbytes;    char buf[MAXDATASIZE];    struct hostent *host;    struct sockaddr_in serv_addr;    if(argv < 2) {        fprintf(stderr, "Please enter the server is hostname!\n");        exit(1);    }        if((host = gethostbyname(argv[1])) == NULL) {        perror("gethostbyname");        exit(1);    }        if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {        perror("socket");        exit(1);    }        serv_addr.sin_family = AF_INET;    serv_addr.sin_port = htons(SERVPORT);    serv_addr.sin_addr = *((struct in_addr *)host->h_addr);    bzero(&(serv_addr.sin_zero), 8);        if(connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(struct sockaddr)) == -1) {        perror("connect");        exit(1);    }        if((sendbytes = send(sockfd, "hello", 5, 0)) == -1) {        perror("send");        exit(1);    }        char revcBuf[100];    recv(sockfd, revcBuf, 100, 0);    close(sockfd);    return 0;}



0 0