⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 server.cpp

📁 <VC++网络游戏建摸与实现>源代码
💻 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 + -