您的位置:首页 > 理论基础 > 计算机网络

Unix c 网络编程 TCP

2015-11-08 17:13 441 查看
服务器端:

===============================================================================================

#include <stdio.h>

#include <stdlib.h>

#include <errno.h>

#include <string.h>

#include <netdb.h>

#include <time.h>

int sockfd;

void do_service(fd)

{

    long t = time(0);

    char *s = ctime(&t);

    write(fd,s,strlen(s));

}

void out_client(struct sockaddr_in clientaddr)

{

    char buffer[16];

    inet_ntop(AF_INET,&clientaddr.sin_addr.s_addr,buffer,sizeof(clientaddr));

    unsigned short port = ntohs(clientaddr.sin_port);

    printf("client ip:%s (%d)\n",buffer,port);

}

int main(int argc,char *argv[])

{

    if(argc < 2)

    {

        fprintf(stderr,"usage: %s port\n",argv[0]);

        exit(1);

    }

    //create socket

    sockfd = socket(AF_INET,SOCK_STREAM,0);

    if(sockfd < 0)

    {

        fprintf(stderr,"socket: %s\n",strerror(errno));

        exit(1);

    }

    //set ip and port

    struct sockaddr_in addr;

    memset(&addr,0,sizeof(addr));

    addr.sin_family = AF_INET;

    addr.sin_port = htons(atoi(argv[1]));

    addr.sin_addr.s_addr = INADDR_ANY; 

    //bind ip and port

    int len = sizeof(addr);

    if(bind(sockfd,(struct sockaddr*)&addr,len) < 0)

    {

        fprintf(stderr,"bind: %s\n",strerror(errno));

        exit(1);

    }

    //begin to listen

    if(listen(sockfd,10) < 0)

    {

        fprintf(stderr,"listen: %s\n",strerror(errno));

        exit(1);

    }

    while(1)

    {

        struct sockaddr_in clientaddr;

        int c_len = sizeof(clientaddr);

        int fd = accept(sockfd,(struct sockaddr*)&clientaddr,&c_len);

        if(fd < 0)

        {

            fprintf(stderr,"accept: %s\n",strerror(errno));

            continue;

        }

        out_client(clientaddr);

        do_service(fd);

        close(fd);

    }

    return 0;

}

==============================================================================================

客户端:

==============================================================================================

#include <stdio.h>

#include <stdlib.h>

#include <errno.h>

#include <string.h>

#include <netdb.h>

int sockfd;

int main(int argc,char *argv[])

{

    if(argc < 3)

    {

        fprintf(stderr,"usage: %s port\n",argv[0]);

        exit(1);

    }

    sockfd = socket(AF_INET,SOCK_STREAM,0);

    if(sockfd < 0)

    {

        fprintf(stderr,"socket:%s\n",strerror(errno));

        exit(1);

    }

    struct sockaddr_in sockaddr;

    memset(&sockaddr,0,sizeof(sockaddr));

    sockaddr.sin_family = AF_INET;

    sockaddr.sin_port = htons(atoi(argv[2]));

    inet_pton(AF_INET,argv[1],&sockaddr.sin_addr.s_addr);

    socklen_t len = sizeof(sockaddr);

    if(connect(sockfd,(struct sockaddr*)&sockaddr,len) < 0)

    {

        fprintf(stderr,"connect: %s\n",strerror(errno));

        exit(1);

    }

    char buffer[1024];

    memset(buffer,0,sizeof(buffer));

    ssize_t n;

    if((n = read(sockfd,buffer,1024)) < 0)

    {

        fprintf(stderr,"read: %s\n",strerror(errno));

        exit(1);

    }

    else

    {

        printf("%s\n",buffer);

    }

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  网络编程 tcp socket unix