游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2902|回复: 2

一个模拟telnet功能的测试(Linux)

[复制链接]

4

主题

18

帖子

32

积分

注册会员

Rank: 2

积分
32
发表于 2003-11-15 17:54:00 | 显示全部楼层 |阅读模式
一个模拟telnet功能的小测试,用了一个管道,比Hello World的代码稍多一点,贴出来供大家批评.算来Gameres的第一贴吧.
其中的头文件就不那出来现丑了.呵呵,就是包了几个其他的头文件.

////////////////////////////////////////////////////////////////////
//        tiny telnet test. server
////////////////////////////////////////////////////////////////////

#include "common_server_header.h"

int main(int argc, char **argv)
{
        FILE *pPipeDesc;
        struct sockaddr_in stListenAddr;
        struct sockaddr_in stJobAddr;
        int nListenDesc;
        int nJobDesc;
        int nAddrSize;
        char pszBuffer[4096];
        int nRC;
        int i;

        nListenDesc = socket(AF_INET, SOCK_STREAM, 0);
        if (nListenDesc == -1) {
                perror("socket");
                return COMMON_SERVER_ERROR;
        }
        bzero(&stListenAddr, sizeof(stListenAddr));
        stListenAddr.sin_family = AF_INET;
        stListenAddr.sin_addr.s_addr = INADDR_ANY;
        stListenAddr.sin_port = htons(COMMON_SERVER_PORT);

        nRC = bind(nListenDesc, (struct sockaddr *)&stListenAddr,
                        sizeof(stListenAddr));
        if (nRC == -1) {
                perror("bind");
                return COMMON_SERVER_ERROR;
        }

        nRC = listen(nListenDesc, 20);
        if (nRC == -1) {
                perror("listen");
                return COMMON_SERVER_ERROR;
        }
        puts("Accepting connections ...\n");
        nAddrSize = sizeof(stJobAddr);
        while (1) {
                nJobDesc = accept(nListenDesc,
                                (struct sockaddr *)&stJobAddr, &nAddrSize);
                if (nJobDesc == -1) {
                        perror("accept");
                        break;
                }
                while (1) {
                        nRC = recv(nJobDesc, pszBuffer, sizeof(pszBuffer), 0);
                        if (nRC <=0) {
                                perror("Recv");
                                break;
                        }
                        puts(pszBuffer);
                        pPipeDesc = popen(pszBuffer, "r");
                        for (i = 0; !feof(pPipeDesc); i++) {
                                if (i >= 4096) i = 0;
                                pszBuffer = getc(pPipeDesc);
                        }//__for__read__pipe__
                        pszBuffer[i - 1] = 0;
                        nRC = send(nJobDesc, pszBuffer, sizeof(pszBuffer), 0);
                        if (nRC <= 0) {
                                perror("Read");
                                break;
                        }
                        pclose(pPipeDesc);
                }//__while__recv__send__
        }//__while__accept__

        close(nJobDesc);
        return COMMON_SERVER_OK;
}

///////////////////////////////////////////////////////////////////
//        tiny telnet test. Client
///////////////////////////////////////////////////////////////////

#include "common_server_header.h"

int main(int argc, char **argv)
{
        struct hostent *pServerEnt;
        struct sockaddr_in stAddr;
        char *pServerName = "192.168.0.6";
        int nSockDesc;
        char Buffer[4096];
        int nRC;

        pServerEnt = gethostbyname(pServerName);
        if (NULL == pServerEnt) {
                perror("resolving host");
                return COMMON_SERVER_ERROR;
        }
        bzero(&stAddr, sizeof(stAddr));
        stAddr.sin_family = AF_INET;
        stAddr.sin_addr.s_addr =
                ((struct in_addr *)(pServerEnt->h_addr))->s_addr;
        stAddr.sin_port = htons(COMMON_SERVER_PORT);

        nSockDesc = socket(AF_INET, SOCK_STREAM, 0);
        if (nSockDesc == -1) {
                perror("socket");
                return COMMON_SERVER_ERROR;
        }
        nRC = connect(nSockDesc, (void *)&stAddr, sizeof(stAddr));
        if (nRC == -1) {
                perror("connect");
                return COMMON_SERVER_ERROR;
        }

        //strcpy(Buffer, "Client Package\n");
        while (1) {
                for (nRC = 0;; nRC++) {
                        Buffer[nRC] = getchar();
                        if (Buffer[nRC] == '\n')
                                break;
                }
                puts(Buffer);
                nRC = send(nSockDesc, Buffer, sizeof(Buffer), 0);
                if (nRC <= 0) {
                        perror("send");
                        continue;
                }
                memset(Buffer, 0, sizeof(Buffer));
                nRC = recv(nSockDesc, Buffer, sizeof(Buffer), 0);
                if (nRC <=0) {
                        perror("recv");
                        continue;
                }
                if (strlen(Buffer) > 2)
                        puts(Buffer);
        }
        close(nSockDesc);
        return COMMON_SERVER_OK;
}

4

主题

18

帖子

32

积分

注册会员

Rank: 2

积分
32
 楼主| 发表于 2003-11-15 18:55:00 | 显示全部楼层

Re:一个模拟telnet功能的测试(Linux)

注:请不要改作成后门程序!

0

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2003-11-16 09:24:00 | 显示全部楼层

Re:一个模拟telnet功能的测试(Linux)

哪里能找到Telnet协议呀?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-2-24 06:33

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表