在Windows 平台中用VC2010实现Telnet服务器工程
源代码,一共三个文件 : TelnetServer.h main.cpp TelnetServer.cpp 新建工程后将main文件替换,然后工程中加入另外两个文件就OK了,仅供参考哦,标准 Telnet功能还没完全实现!
1、工程头文件
#include
#include #pragma comment(lib, "wsock32.lib") struct USER {
TelnetServer.h
// 存储客户信息
char cName[19]; // 用户名 char cInput[256]; // 用户输入消息 SOCKET sUser; // 通信socket SOCKADDR_IN user_sin; // 接受用户的地址 int user_sin_len; // user_sin的长度 char cNote[256]; // 混合信息 }; struct MESSAGE { int nUser; char cMsg[256]; }; //定义消息 //消息的所有者
//消息内容
//telnet服务器类,该类是服务器进行服务操作的核心
class TelnetServer
{
public:
TelnetServer(); //构造函数
void setServer(int nPort, int nMaxConnects, char connectMsg[9999], char
serverFullMsg[9999]);
/////该函数初始化服务器的端口号、最大连接数
~TelnetServer();
MESSAGE getMessage();
//提取消息函数,当服务器检查过所有客户消息状况后,该函数将有客户消息的socket 的消息送到发送队列中
int startListen();//开始监听函数
void stopListen();//停止监听函数
void closeClientSocket(int nUser);//关闭某一个客户的连接 void acceptConnects();//当有客户时接受连接 void acceptMessages();//检查是否有客户消息,若有则放到发送队列中 USER getUserInfo(int nUser);// 从用户数组中得到用户信息 void setUserName(int nUser, char cName[19]); void setUserNote(int nUser, char cNote[256]); int sendUser(int nUser, char cSend[256]);//发送给某一个客户某个消息 void sendAll(char cSend[256]);//给所有客户发送一条消息,用于多人会话 void closeEmptySockets();//关闭不用的socket protected: USER *user; // 存储所有的客户 int PORT; // 监听端口 int MAX_CONNECTS; // 允许的最大用户数 char CONNECT_MSG[9999]; // 客户端成功连接后发送的消息 char SERVER_FULL_MSG[9999]; // 服务器满后发送的消息 char cOutput[255]; SOCKET sServer; SOCKADDR_IN server_sin; WSADATA WSAData; MESSAGE mMsg[100]; }; -------------------------------------------------------------------------------------------- // 发送到用户的文字
// 服务器socket
// 局部socket地址
// winsock细节
// 消息队列
2、main()主函数源程序
#include // 使用控制台程序
#include "TelnetServer.h"
using namespace std;
int main()
{
int nListen, // 监测服务器的监听错误
nPort, // 服务器端口
nMaxConnects; // 最大连接数
MESSAGE mMsg; // 存储客户端发送的消息
USER uInfo;
TelnetServer tServ; // 主控制类
char cChat[9999]; // 存储聊天内容
char *cText,*cText2,cInt[5];
cout<<"---- 服务器已启动----"< // 得到服务器的监听端口
cout<<"请输入监听端口号(不能小于23): ";
cin>>nPort;
if (nPort < 23) { nPort = 23; }
// 得到最大允许的连接
cout<<"Max Clients (1-100): ";
cin>>nMaxConnects;
if (nMaxConnects < 1) { nMaxConnects = 1; }
if (nMaxConnects > 100) { nMaxConnects = 100; }
// 设置客户连接消息
cChat[0] = 0;
cText = &;cChat[0];
strcat(cText, "你已经成功连接到服务器端!");
cInt[0] = (char) 13;
cInt[1] = (char) 10;
cInt[2] = 0;
strcat(cText, &;cInt[0]);
cText2 = "服务器已满,请稍后再试!";
// 发送服务器信息到服务器类
tServ.setServer(nPort, nMaxConnects, cText, cText2);
// 开始监听连接
nListen = tServ.startListen();
if (nListen == -1)
{
cout<<"服务器无法在指定的端口负责监听! (PORT: "< return 0;
}
cout< while (1)
{ Sleep(100);
// 接受连接(如果有)
tServ.acceptConnects();
// 接受到来的消息(如果有)
t