您的位置:首页 > 理论基础 > 计算机网络

网络编程--C/S日期查询例子

2013-04-24 18:18 218 查看
日期查询服务器--把当前日期和时间以ASCII格式通过套接字发送给客户端。

#include <sys/socket.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <time.h>
#include <string.h>
#include <unistd.h>

/* MAX_BUFFER为最大缓冲区容量 */
#define MAX_BUFFER          128
/* 套接字使用的端口号 */
#define DAYTIME_SERVER_PORT 13

int main()
{
/* 两个套接字描述符 */
int serverFd, connectionFd;
/* 套接字地址结构体 */
struct sockaddr_in servaddr;
/* 暂时保存时间字符串所需的缓冲区 */
char timebuffer[MAX_BUFFER+1];
/* 用来描述时间的结构体 */
time_t currentTime;

/* 第一步使用socket函数创建套接字,其中AF_INET指明要创建一个IP套接字,SOCK_STREAM表明使用高可靠性的流协议,0表示默认的流类型协议即TCP协议 */
serverFd = socket(AF_INET, SOCK_STREAM, 0);

/* 初始化地址结构,并将其元素设置为零 */
memset(&servaddr, 0, sizeof(servaddr));

/* 再次用AF_INET指明位IPv4套接字 */
servaddr.sin_family = AF_INET;
/* s_addr指定一个地址,这里是套接字建立连接后接受输入的地址。INADDR_ANY指明接受来自主机的任何可用接口的连接 */
/* 这里右端也可以用inet_addr(INADDR_ANY) */
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
/* 定义将要使用的端口 */
servaddr.sin_port = htons(DAYTIME_SERVER_PORT);
/*其中,htonl()和htons()进行字节顺序转换保证提交到网络的包中字节是正确的 */

/* 把前面创建的地址结构体和套接字绑定 */
bind(serverFd, (struct sockaddr *)&servaddr, sizeof(servaddr));

/* 必须调用listen函数,客户端才能够连接到这个套接字。这个函数告诉协议栈已经准备好接受连接,参数5指定等待连接的客户队列中最多有5个客户 */
listen(serverFd, 5);
/* 接受客户端连接并提供当前时间 */
while(1)
{
/* 对套接字serverFd调用accept函数,以同意建立新的客户连接 */
connectionFd = accept(serverFd, (struct sockaddr *)NULL, NULL);
/* 当一个客户连接到服务器的时候, 网络栈会创建一个描述连接终点的新的套接字,并有accept返回此套接字*/
if(connectionFd >= 0)
{
/* time()函数获取当前时间,从1970.1.1开始的总秒数 */
currentTime = time(NULL);
/* ctime()将时间转换成可阅读的形式 */
snprintf(timebuffer, MAX_BUFFER, "%s\n", ctime(¤tTime));
/*使用write函数通过connectionFd套接字把这个回应字符串发送到相应的客户端 */
write(connectionFd, timebuffer, strlen(timebuffer));
/* 关闭客户套接字,结束通信 */
close(connectionFd);
}
}
}
日期查询客户端

#include <sys/socket.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <time.h>

#define MAX_BUFFER          128
#define DAYTIME_SERVER_PORT 13

int main()
{
int connectionFd, in , index = 0, limit = MAX_BUFFER;
struct sockaddr_in servaddr;
char timebuffer[MAX_BUFFER+1];

connectionFd = socket(AF_INET, SOCK_STREAM, 0);

memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(DAYTIME_SERVER_PORT);
servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");

connect(connectionFd, (struct sockaddr *)&servaddr, sizeof(servaddr));

while((in = read(connectionFd, &timebuffer[index], limit)) > 0)
{
index += in;
limit -= in;
}
timebuffer[index] = 0;
printf("\n%s\n", timebuffer);

close(connectionFd);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: