服务器端代码:
#include"mylib.h"
#define MAX_LISTEN_QUE 5
int main(int argc,char *argv[])
{
int sockfd,listenfd;
struct sockaddr_in server,client;
socklen_t len;
time_t timep;
char buf[200]={0};
int opt;
if((listenfd = socket(AF_INET,SOCK_STREAM,0))<0)
{
perror("Creat socket failed\n");
return -1;
}
//监听套接字 地址可重用
if((setsockopt(listenfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt)))<0)
{
perror("Error,set socket reuse addr failed\n");
return -5;
}
bzero(&server,sizeof(server));
server.sin_family = AF_INET;
server.sin_port = htons(10000);
server.sin_addr.s_addr = htonl(INADDR_ANY);
len = sizeof(struct sockaddr);
if(bind(listenfd,(struct sockaddr*)(&server),sizeof(server))<0)
{
perror("bind error\n");
return -2;
}
listen(listenfd,MAX_LISTEN_QUE);
while(1)
{
sockfd = accept(listenfd,(struct sockaddr *)&client,&len);
if(sockfd<0)
{
perror("accept error\n");
return -3;
}
timep = time(NULL);
snprintf(buf,sizeof(buf),"%s",ctime(&timep));
write(sockfd,buf,strlen(buf));
printf("Bytes:%d\n",strlen(buf));
close(sockfd);
}
return 0;
}
客户端代码:
#include"mylib.h"
int main(int argc,char *argv[])
{
int sockfd;
struct sockaddr_in servaddr;
char buf[100]={0};
int Rbytes;
if((sockfd = socket(AF_INET,SOCK_STREAM,0))<0)
{
perror("socket error\n");
return -1;
}
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
// servaddr.sin_addr.s_addr = htonl(INADDR_ANY);//inet_addr("127.0.0.1");
servaddr.sin_port = htons(10000);
if(connect(sockfd,(struct sockaddr*)(&servaddr),sizeof(servaddr))<0)
{
perror("connect error\n");
return -2;
}
Rbytes = read(sockfd,buf,100);
if(Rbytes < 0)
{
perror("Error,read failed\n");
return -2;
}
if(0 == Rbytes)
{
perror("Server close connection\n");
return -3;
}
printf("Read bytes %d\n",Rbytes);
printf("Time:%s\n",buf);
close(sockfd);
return 0;
}
实验结果: