Socket编程获取服务器时间

来源:互联网 发布:免费自动拨号软件 编辑:程序博客网 时间:2024/04/28 06:37

客户端向服务器端发送请求,服务器收到请求做相应的处理,将处理结果传回客户端。下面采用TCP协议实现服务器和客户端之间的连接。

1.      客户端

约定双方的传输协议(UDP或者TCP),根据传输协议创建socket;

服务器的IP地址和端口号;

连接服务器;

获取服务器传递回来的数据。

#include<string.h>   #include <sys/types.h>   #include <sys/socket.h>   #include <sys/time.h>   #include <time.h>   #include <fcntl.h>   #include<netinet/in.h>   #include<arpa/inet.h>   #include <sys/errno.h>   #include<iostream>   #include<stdlib.h>   #include<stdio.h>   using namespace std;  const int MAXLINE=1024;  int main(int argc,char** argv)  {      int sockfd,n;      char recvline[MAXLINE+1];      struct sockaddr_in servaddr;      if(argc!=2)      {          cout<<"usage: a.out<IPaddress"<<endl;          exit(0);      }      sockfd=socket(AF_INET,SOCK_STREAM,0);      if(sockfd<0)      {          cout<<"socket error"<<endl;          exit(0);      }      memset(&servaddr,0, sizeof(servaddr));      servaddr.sin_family=AF_INET;      servaddr.sin_port=htons(8080);//将无符号短整型数值转换为网络字节序,即将数值的高位字节存放到内存中的低位字节0X1234变为0X3412       if(inet_pton(AF_INET,argv[1],&servaddr.sin_addr)<=0)//将ip地址在“点分十进制”和整数之间转换       {          cout<<"inet_ptons error"<<endl;          exit(0);      }      if(connect(sockfd,(sockaddr*)&servaddr,sizeof(servaddr))<0)      {          cout<<"connect error"<<endl;          exit(0);      }      while((n=read(sockfd,recvline,MAXLINE))>0)      {          recvline[n]=0;          if(fputs(recvline,stdout)==EOF)          {              cout<<"fputs error"<<endl;              exit(0);          }      }      if(n<0)      {        cout<<"read error"<<endl;        exit(0);      }      exit(0);  }  

2.      服务器

约定双方的传输协议(UDP或者TCP),根据传输协议创建socket;

将地址和端口绑定到socket;

对端口进行侦听,直到侦听到有连接信息;

接收连接,然后将数据写回连接中。

将地址和端口绑定到socket  


#include<string.h>  #include <sys/types.h>  #include <sys/socket.h>  #include <sys/time.h>  #include <time.h>  #include <fcntl.h>  #include<netinet/in.h>  #include<arpa/inet.h>  #include <sys/errno.h>  #include<iostream>  #include<stdlib.h>  #include<stdio.h>  #include<errno.h>  using namespace std;    const int MAXLINE=1024;  int main(int argc,char **argv)  {      int listenfd,connfd;      struct sockaddr_in servaddr;      char buff[MAXLINE];      time_t ticks;      listenfd=socket(AF_INET,SOCK_STREAM,0);//建立socket      if(listenfd<0)      {          cout<<"socket error "<<strerror(errno)<<endl;          exit(0);      }      memset(&servaddr,0, sizeof(servaddr));      servaddr.sin_family=AF_INET;      servaddr.sin_port=htons(8080);      servaddr.sin_addr.s_addr=htonl(INADDR_ANY);      int bindfd=bind(listenfd,(sockaddr*)&servaddr,sizeof(servaddr));//将地址和端口绑定到socket      if(bindfd<0)      {          cout<<"bind error"<<bindfd<<endl;          exit(0);      }      listen(listenfd,MAXLINE);//监听连接,一直阻塞,直到有连接出现      while(1)      {          connfd=accept(listenfd,(sockaddr*)NULL,NULL);//接收连接传递的数据          ticks=time(NULL);          snprintf(buff,sizeof(buff),"%.24s\r\n",ctime(&ticks));          cout<<strlen(buff)<<endl;          write(connfd,buff,strlen(buff));//将传递的数据写回到socket中          close(connfd);      }      return 0;  }  


原创粉丝点击