UNIX网络编程,简易客户端及服务端(socket)

实验环境:两台阿里云服务器

客户端:

#include<errno.h>
#include<unistd.h>
#include<arpa/inet.h>
#include<string.h>
#include<netinet/in.h>
#include<stdio.h>
#include<stdlib.h>
#include<sys/socket.h>

#define SA struct sockaddr
#define MAXLINE 4096

#define bzero(ptr,n) memset(ptr,0,n)

int main(int argc,char **argv)
{
    int sockfd,n;
    char recvline[MAXLINE + 1];
    struct sockaddr_in servaddr;
    
    if(argc != 2){
        printf("use Ip");
        exit(1);
    }      
    
    if((sockfd = socket(AF_INET,SOCK_STREAM,0)) < 0){
        printf("socket error");
        exit(1);
    }
    
    bzero(&servaddr,sizeof(servaddr));
    servaddr.sin_family = AF_INET;
    servaddr.sin_port = htons(3500);
    
    if(inet_pton(AF_INET,argv[1],&servaddr.sin_addr) <= 0) {
        printf("inet_pton error for %s",argv[1]);
        exit(2);
    }
    if(connect(sockfd,(SA *) &servaddr,sizeof(servaddr)) < 0){
        printf("connect error");
        printf("%d",errno);                                     //出错时会打印出错误代码
        exit(1);
    }
    while((n = read(sockfd,recvline,MAXLINE)) > 0){
        recvline[n] = 0;
        if(fputs(recvline,stdout) == EOF){
            printf("fputs error");
            exit(1);
        }
    }
    if(n < 0){
        printf("read error");
        exit(1);
    }
    exit(0);
}







服务端:

#include<string.h>
#include<unistd.h>
#include<arpa/inet.h>
#include<sys/types.h>
#include<time.h>
#include<netinet/in.h>
#include<stdio.h>
#include<stdlib.h>
#include<sys/socket.h>

#define SA struct sockaddr
#define MAXLINE 4096
#define LISTENQ 1024
#define bzero(ptr,n) memset(ptr,0,n)

int main()
{
    int listenfd,connfd;
    struct sockaddr_in servaddr;
    char buff[MAXLINE];
    time_t ticks;
    
    listenfd = socket(AF_INET,SOCK_STREAM,0);
    
    bzero(&servaddr,sizeof(servaddr));
    servaddr.sin_family = AF_INET;
    servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
    servaddr.sin_port = htons(3500);
    
    bind(listenfd,(SA *) &servaddr,sizeof(servaddr));
    
    listen(listenfd,LISTENQ);
    
    for(;;){
        connfd = accept(listenfd,(SA *)NULL,NULL);
        ticks = time(NULL);
        snprintf(buff,sizeof(buff),"%.24s\r\n",ctime(&ticks));
        write(connfd,buff,strlen(buff));
        close(connfd);
    }
}

成功后,会返回服务端时间。

发布了14 篇原创文章 · 获赞 36 · 访问量 8242

猜你喜欢

转载自blog.csdn.net/weixin_42047699/article/details/89314398
今日推荐