linux套接字编程:实现服务器端给客户端发送时间

服务器端代码如下:

#include"apue.h"


#define SERVER_PORT 8888
static int sfd;


void init_network()
{
	int ret;
	struct sockaddr_in addr;
	sfd = socket(AF_INET,SOCK_STREAM,0);
	if(sfd < 0){
	  perror("socket()");
	  exit(1);
	}
	addr.sin_family = AF_INET;
	addr.sin_port = htons(SERVER_PORT);
	addr.sin_addr.s_addr = htonl(INADDR_ANY);
	ret = bind(sfd,(struct sockaddr*)&addr,sizeof(addr));
	if(ret != 0)
	{
	   perror("bind()");
	   exit(1);
	}
	int val = 1;
         int rset = setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,(void *)&val,sizeof(int));
        if(rset == -1)
         {
           printf("setsockopt");
           exit(1);
          }    
	
	listen(sfd,20);
	
		
}


void destory_network()
{
	close(sfd);
}


int main()
{
	int afd;
	struct sockaddr_in peer_addr;
	time_t t;
	char buf[64];
	struct tm *ptm;
	socklen_t addr_len;
	
	init_network();
	while(1){
	  addr_len = sizeof(peer_addr);
	  afd = accept(sfd,(struct sockaddr*)&peer_addr,&addr_len);
	  printf("connect %s %d \n",inet_ntoa(peer_addr.sin_addr),ntohs(peer_addr.sin_port));
	   
	  t = time(NULL);
	  ptm = localtime(&t);
	  sprintf(buf,"%d-%d-%d  %d:%d:%d",
	   ptm->tm_year+1900,
	   ptm->tm_mon+1,ptm->tm_mday,ptm->tm_hour,ptm->tm_min,ptm->tm_sec);
	    
	  write(afd,buf,sizeof(buf));
	
	  close(afd);

	}	
	close_network();
	
	return 0;
	
}

客户端代码如下:

#include"apue.h"

#define SERVER_PORT 8888 



int main(int argc,char **argv)
{
    int sfd;
    int ret;
    char buf[64];
    struct sockaddr_in addr;
    time_t t;
    struct tm *ptm;
    if(argc != 2)
	{
	  perror("Usage: need server's IP");
	  return -1;
	}
    bzero(&addr,sizeof(addr));
    addr.sin_family = AF_INET;
    addr.sin_port = htons(SERVER_PORT);
    addr.sin_addr.s_addr = inet_addr(argv[1]);
    sfd = socket(AF_INET,SOCK_STREAM,0);
    if(sfd < 0)
     {
	perror("socket()");
	return -1;	
      } 
     ret = connect(sfd,(struct sockaddr*)&addr,sizeof(addr));
     if(ret != 0)
      {
	perror("connect");
	return -1;
	}
      bzero(buf,64);
      read(sfd,buf,sizeof(buf));
     printf("buf:%s\n",buf);

    close(sfd);
    
    return 0;
}

#include"apue.h"

#define SERVER_PORT 8888 

int main(int argc,char **argv)
{
    int sfd;
    int ret;
    char buf[64];
    struct sockaddr_in addr;
    time_t t;
    struct tm *ptm;
    if(argc != 2)
    {
      perror("Usage: need server's IP");
      return -1;
    }
    bzero(&addr,sizeof(addr));
    addr.sin_family = AF_INET;
    addr.sin_port = htons(SERVER_PORT);
    addr.sin_addr.s_addr = inet_addr(argv[1]);
    sfd = socket(AF_INET,SOCK_STREAM,0);
    if(sfd < 0)
     {
    perror("socket()");
    return -1;    
      } 
     ret = connect(sfd,(struct sockaddr*)&addr,sizeof(addr));
     if(ret != 0)
      {
    perror("connect");
    return -1;
    }
      bzero(buf,64);
      read(sfd,buf,sizeof(buf));
     printf("buf:%s\n",buf);

    close(sfd);
    
    return 0;
}
字节序:  由处理器决定,字节序指高  /  低字节 分别存储在高   /  低地址。

低字节存储在高地址处,高字节存储在低地址处   常见的x86服务器是小端字节序。

高字节存储在高地址处,低字节存储在低地址处  常见的是ARM处理器  网络端字节序  大端。

long  长整形,short 短整形

服务器端:socket ->bind->listen ->accept ->read/write->close

客户端: socket->connect->read/write->close;

猜你喜欢

转载自blog.csdn.net/d1306937299/article/details/81411937