实验环境:两台阿里云服务器
客户端:
#include<errno.h>
#include<unistd.h>
#include<arpa/inet.h>
#include<string.h>
#include<netinet/in.h>
#include<stdio.h>
#include<stdlib.h>
#include<sys/socket.h>
#define SA struct sockaddr
#define MAXLINE 4096
#define bzero(ptr,n) memset(ptr,0,n)
int main(int argc,char **argv)
{
int sockfd,n;
char recvline[MAXLINE + 1];
struct sockaddr_in servaddr;
if(argc != 2){
printf("use Ip");
exit(1);
}
if((sockfd = socket(AF_INET,SOCK_STREAM,0)) < 0){
printf("socket error");
exit(1);
}
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(3500);
if(inet_pton(AF_INET,argv[1],&servaddr.sin_addr) <= 0) {
printf("inet_pton error for %s",argv[1]);
exit(2);
}
if(connect(sockfd,(SA *) &servaddr,sizeof(servaddr)) < 0){
printf("connect error");
printf("%d",errno); //出错时会打印出错误代码
exit(1);
}
while((n = read(sockfd,recvline,MAXLINE)) > 0){
recvline[n] = 0;
if(fputs(recvline,stdout) == EOF){
printf("fputs error");
exit(1);
}
}
if(n < 0){
printf("read error");
exit(1);
}
exit(0);
}
服务端:
#include<string.h>
#include<unistd.h>
#include<arpa/inet.h>
#include<sys/types.h>
#include<time.h>
#include<netinet/in.h>
#include<stdio.h>
#include<stdlib.h>
#include<sys/socket.h>
#define SA struct sockaddr
#define MAXLINE 4096
#define LISTENQ 1024
#define bzero(ptr,n) memset(ptr,0,n)
int main()
{
int listenfd,connfd;
struct sockaddr_in servaddr;
char buff[MAXLINE];
time_t ticks;
listenfd = socket(AF_INET,SOCK_STREAM,0);
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(3500);
bind(listenfd,(SA *) &servaddr,sizeof(servaddr));
listen(listenfd,LISTENQ);
for(;;){
connfd = accept(listenfd,(SA *)NULL,NULL);
ticks = time(NULL);
snprintf(buff,sizeof(buff),"%.24s\r\n",ctime(&ticks));
write(connfd,buff,strlen(buff));
close(connfd);
}
}
成功后,会返回服务端时间。