Little BigUs 2022-01-04 11:03 采纳率: 92.7%
浏览 12
已结题

和远程服务器交互出现错误

我想通过一个程序 和远程服务器建立连接并且交互,就像TELNET一样,但是遇到了问题。先看代码吧。

#include <iostream>
#include <string>
#include <stdlib.h>
#include <stdio.h>
#include <process.h>
#include <WinSock2.h> //适用平台 Windows

using namespace std;

#pragma comment(lib, "ws2_32.lib")

unsigned __stdcall resolve(void* pArguments)
{
    SOCKET socket = (SOCKET) pArguments;
    while(1)
    {
        char recvBuf[500]="";
        recvBuf[recv(socket, recvBuf, 500, 0)] = '\0';
        printf("%s",recvBuf);
    }
}

int main()
{
    WSADATA wsaData;
    WORD wVersionRequested = MAKEWORD(2, 1);
    //WSAStarup,即WSA(Windows SocKNDs Asynchronous,Windows套接字异步)的启动命令
    int err = WSAStartup(wVersionRequested, &wsaData);

    SOCKET sockClient; //客户端的套接字
    sockClient = socket(AF_INET, SOCK_STREAM, 0); //建立socket对象
    char host[50];
    int port;
    printf("输入连接的主机:");
    scanf("%s",&host);
    printf("输入连接的端口:");
    scanf("%d",&port);
    HOSTENT* pHostent;
    pHostent = gethostbyname(host);
    cout<<pHostent->h_name<<endl;
    SOCKADDR_IN addrServer; //服务端地址
    addrServer.sin_addr.S_un.S_addr = *((DWORD *)pHostent->h_addr_list[0]); //得到smtp服务器的网络字节序的ip地址
    addrServer.sin_family = AF_INET;
    addrServer.sin_port = htons(port); //连接端口25

    if((err = connect(sockClient, (SOCKADDR*)&addrServer, sizeof(SOCKADDR)))) //向服务器发送请求
    {
        cout<<"连接邮件服务器失败!"<<endl;
        return 0;
    }
    HANDLE hThread;
    unsigned threadID;
    hThread = (HANDLE)_beginthreadex( NULL, 0, &resolve, (void*)sockClient, 0, &threadID );

    //send(sockClient,"ehlo qq.com\r\n",strlen("ehlo qq.com\r\n"),0);
    //cout<<"ehlo qq.com\r\n"<<endl;
    while(1)
    {
        char buff[500] = "";
        cin>>buff;
        strcat(buff,"\r\n");
        send(sockClient,buff,strlen(buff),0);
    }
    Sleep(20000);
    CloseHandle( hThread );
}

问题是这样的,运行这个程序,输入 smtp.qq.com 和 25,连接到邮箱服务器。出现下面的文字代表连接成功了,

img


然后输入ehlo qq.com ,就会出现无法识别的输入

img


但是我们如果把代码55,56行取消注释,然后运行程序。结果如下

img

由此可见,输入的符号没问题,但我不知道是什么导致不能直接通过输入和服务端进行交互,是要经过什么转换吗?

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 1月12日
    • 创建了问题 1月4日

    悬赏问题

    • ¥15 多电路系统共用电源的串扰问题
    • ¥15 slam rangenet++配置
    • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
    • ¥15 对于相关问题的求解与代码
    • ¥15 ubuntu子系统密码忘记
    • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
    • ¥15 保护模式-系统加载-段寄存器
    • ¥15 电脑桌面设定一个区域禁止鼠标操作
    • ¥15 求NPF226060磁芯的详细资料
    • ¥15 使用R语言marginaleffects包进行边际效应图绘制