socket测试3

server

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<errno.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>

#define MAXLINE 4096

int main(int argc, char** argv)
{
        int    listenfd, connfd;
        struct sockaddr_in     servaddr;
        char    buff[4096];
        int     n;

        if( (listenfd = socket(AF_INET, SOCK_STREAM, 0)) == -1 ){
                printf("create socket error: %s(errno: %d)\n",strerror(errno),errno);
                exit(0);
        }

        memset(&servaddr, 0, sizeof(servaddr));
        servaddr.sin_family = AF_INET;
        servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
        servaddr.sin_port = htons(13206);

        if( bind(listenfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) == -1){
                printf("bind socket error: %s(errno: %d)\n",strerror(errno),errno);
                exit(0);
        }

        if( listen(listenfd, 10) == -1){
                printf("listen socket error: %s(errno: %d)\n",strerror(errno),errno);
                exit(0);
        }
        while(1){
                struct sockaddr from;

                if( (connfd = accept(listenfd, (struct sockaddr*)&from, NULL)) == -1){
                        printf("accept socket error: %s(errno: %d)",strerror(errno),errno);
                        continue;
                }else{
                        struct sockaddr_in *sock = ( struct sockaddr_in*)&from;
                        int port = ntohs(sock->sin_port);
                        struct in_addr in  = sock->sin_addr;
                        char str[INET_ADDRSTRLEN];   //INET_ADDRSTRLEN这个宏系统默认定义 16
                        //成功的话此时IP地址保存在str字符串中。
                        inet_ntop(AF_INET,&in, str, sizeof(str));
                        if( send(connfd, str, strlen(str), 0) < 0)
                        {
                                printf("send msg error: %s(errno: %d)\n", strerror(errno), errno);
                                exit(0);
                        }
                }
                char student[50] = "服务器实现者学号:20191206";
                if( send(connfd, student, strlen(student), 0) < 0)
                {
                        printf("send msg error: %s(errno: %d)\n", strerror(errno), errno);
                        exit(0);
                }
                time_t rawtime;
                struct tm *info;
                char buffer[80];

                time( &rawtime );

                info = localtime( &rawtime );
                char buf[64];
                struct tm *ptm = localtime(&info);
                strftime(buf,64,"%F %T",ptm);
                if(send(connfd, buf, strlen(buf), 0) < 0)
                {
                        printf("send msg error: %s(errno: %d)\n", strerror(errno), errno);
                        exit(0);
                }

                close(connfd);
        }
        close(listenfd);
}

client

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<errno.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>

#define MAXLINE 4096
int main(int argc, char** argv)
{
        int    sockfd, n;
        char    recvline[4096], sendline[4096];
        struct sockaddr_in    servaddr;

        if( argc != 2){
                printf("usage: ./client <ipaddress>\n");
                exit(0);
        }

        if( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0){
                printf("create socket error: %s(errno: %d)\n", strerror(errno),errno);
                exit(0);
        }

        memset(&servaddr, 0, sizeof(servaddr));
        servaddr.sin_family = AF_INET;
        servaddr.sin_port = htons(13206);
        if( inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0){
                printf("inet_pton error for %s\n",argv[1]);
                exit(0);
        }

        if( connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) < 0){
                printf("connect error: %s(errno: %d)\n",strerror(errno),errno);
                exit(0);
        }
        char buff[4096];
        n = recv(sockfd, buff, MAXLINE, 0);
        buff[n] = '\0';
        printf("%s\n", buff);

        n = recv(sockfd, buff, MAXLINE, 0);
        buff[n] = '\0';
        printf("%s\n", buff);

        n = recv(sockfd, buff, MAXLINE, 0);
        buff[n] = '\0';
        printf("%s\n", buff);

        close(sockfd);
        exit(0);
}


posted @ 2021-12-20 11:42  191206  阅读(29)  评论(0编辑  收藏  举报