服务器端:

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

#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;

}