📄 server.cpp
字号:
// server.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "winsock.h"
#include "stdlib.h"
#include "stdio.h"
void usage(char *name)
{
fprintf(stderr, "usage: %s [port]\n", name);
}
int main(int argc,char *argv[])
{
SOCKET servsock,clisock;
struct sockaddr_in sa;
struct sockaddr_in cliaddr; /* 存放返回的客户地址信息 */
int len;
int err;
int servport = 5555; /* 默认服务端口 */
char buff[256]; /* 存放时间/日期信息的缓冲区 */
SYSTEMTIME st;
WSADATA wsd;
printf("************************************************************\n");
printf("*time server sample,written by suyu,chenyu\n");
printf("*mail:webants@163.com \n");
printf("************************************************************\n");
/* 处理命令行参数 */
if (argc > 2) {
usage(argv[0]);
return -1;
}
if (argc == 2) {
servport = atoi(argv[1]);
if (servport > 65535 || servport < 1) {
usage(argv[0]);
return -2;
}
}
/* 初始化Winsock1.1 */
if (WSAStartup(MAKEWORD(1,1), &wsd) != 0) {
printf("WSAStartup() failed !\n");
return -3;
}
/* 创建套接字 */
printf("create socket ...\n");
servsock = socket(AF_INET, SOCK_STREAM, 0);
if (servsock == INVALID_SOCKET) {
fprintf(stderr, "socket() failed: %d\n", WSAGetLastError());
return -4;
}
printf("[OK]\n");
/* 填充服务器地址结构 */
memset(&sa, 0, sizeof(sa));
sa.sin_family = AF_INET;
sa.sin_port = htons(servport);
sa.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
/* 绑定套接字到服务器地址结构 */
printf("bind ...\n");
err = bind(servsock, (const sockaddr *)&sa,sizeof(sa));
if (err != 0) {
fprintf(stderr, "bind() failed: %d\n", WSAGetLastError());
return -5;
}
printf("[OK]\n");
/* 监听套接字 */
printf("listen ...\n");
err = listen(servsock,5);
if (err != 0) {
fprintf(stderr, "listen() failed: %d\n", WSAGetLastError());
return -6;
}
printf("[OK]\n");
/* 循环接受连接请求 */
while(1) {
printf("wait request ...\n");
len = sizeof(cliaddr);
clisock = accept(servsock, (struct sockaddr *)&cliaddr, &len);
if (clisock == INVALID_SOCKET) {
fprintf(stderr, "accept() failed: %d\n", WSAGetLastError());
closesocket(servsock);
return -7;
}
printf("accept client: %s:%d\n", inet_ntoa(cliaddr.sin_addr), ntohs(cliaddr.sin_port));
GetLocalTime(&st); /* 得到本地时间/日期 */
/* 为返回给客户整理时间/日期信息格式 */
sprintf(buff,"YEAR : %u \nMONTH : %u \nDAY : %u \nHOUR: %u \nMINUTE : %u \nSECOND : %u \n", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);
send(clisock, buff, strlen(buff), 0); /* 发送给客户 */
closesocket(clisock); /* 关闭与客户的连接 */
printf("[server OK]\n");
}
closesocket(servsock); /* 关闭服务套接字 */
WSACleanup(); /* 释放资源 */
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -