Unix c 网络编程 TCP

来源:互联网 发布:网络拓扑图图片 编辑:程序博客网 时间:2024/05/01 01:06
服务器端:
===============================================================================================
#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;
}
0 0
原创粉丝点击