tcp实现回射服务器

来源:互联网 发布:网络教育和业余哪个好 编辑:程序博客网 时间:2024/05/21 14:00

linux下的tcp套接字实现的回射服务器,也就是客户发送一段,服务器把这段返回给客户。

客户端

#include <iostream>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#define SERV_PORT 5566#define CLIENT_PORT 5567#define MAX_MESG_SIZE 1024using namespace std;int main(){        int sockfd;        struct sockaddr_in servaddr;        bzero(&servaddr, sizeof(servaddr));        servaddr.sin_family = AF_INET;        servaddr.sin_port = htons(SERV_PORT);        inet_aton("127.0.0.1", &servaddr.sin_addr);        if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)        {                printf("socket error");                return -1;        }        if((connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)))<0)        {                printf("connect error!\n");                return -1;        }        char sendbuff[MAX_MESG_SIZE];        char recvbuf[MAX_MESG_SIZE];        while(fgets(sendbuff, MAX_MESG_SIZE, stdin) != NULL)        {                int n;                send(sockfd, sendbuff, strlen(sendbuff), 0);                if((n = recv(sockfd, recvbuf, MAX_MESG_SIZE, 0))>0)                {                        recvbuf[n] = 0;                        fputs(recvbuf, stdout);                }        }        return 0;}


服务端:

#include <iostream>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#define SERV_PORT 5566#define MAX_MESG_SIZE 1024using namespace std;void my_echo(int connectfd);int main(){        int sockfd;        int connectfd;        pid_t childpid;        struct sockaddr_in servaddr;        bzero(&servaddr, sizeof(servaddr));        servaddr.sin_family = AF_INET;        servaddr.sin_port = htons(SERV_PORT);        servaddr.sin_addr.s_addr = htonl(INADDR_ANY);        if((sockfd = socket(AF_INET, SOCK_STREAM, 0))<0)        {                printf("socket error!\n");                return -1;        }        if((bind(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)))<0)        {                printf("bind error!\n");                return -1;        }        if(listen(sockfd, 5) < 0)        {                printf("listen error!\n");                return -1;        }        while(1)        {                connectfd = accept(sockfd, NULL, NULL);                if((childpid = fork()) == 0)                {                        close(sockfd);                        my_echo(connectfd);                        return 0;                }                close(connectfd);        }        return 0;}void my_echo(int connectfd){        ssize_t n;        char buff[MAX_MESG_SIZE];        while((n = recv(connectfd, buff, MAX_MESG_SIZE, 0)) > 0)                send(connectfd, buff, n, 0);        if(n < 0)                printf("read error!\n");}