Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ tcp套接字服务器未发送_C++_Sockets - Fatal编程技术网

C++ tcp套接字服务器未发送

C++ tcp套接字服务器未发送,c++,sockets,C++,Sockets,我有这个代码,我从虚拟机上运行客户端,它可以连接在同一台PC上,但它永远不会收到登录消息,原因可能是什么 不确定send标志参数是否设置正确 static const char *LOGIN = "LOGIN\n"; int main() { int s = socket(AF_INET, SOCK_STREAM, 0); struct sockaddr_in addr; socklen_t addrlen = sizeof(addr); //initial

我有这个代码,我从虚拟机上运行客户端,它可以连接在同一台PC上,但它永远不会收到登录消息,原因可能是什么

不确定send
标志
参数是否设置正确

static const char *LOGIN = "LOGIN\n";

int main()
{
    int s = socket(AF_INET, SOCK_STREAM, 0);

    struct sockaddr_in addr;
    socklen_t addrlen = sizeof(addr);

    //initialize structure
    bzero(&addr, addrlen);
    addr.sin_family = AF_INET;
    addr.sin_port = htons(6666);
    addr.sin_addr.s_addr = htonl(INADDR_ANY);

    bind(s, (struct sockaddr *)&addr, addrlen);
    listen(s, 1);

    struct sockaddr_in client_addr;
    socklen_t client_addrlen = sizeof(client_addr);
    int c = accept(s, (struct sockaddr *)&client_addr, &client_addrlen);

    char *msg = new char[15];

        //print client address
        char * buf = new char[16];
        inet_ntop(AF_INET, &(client_addr.sin_addr.s_addr), buf, 16);
        cout << "Client connected: " << buf << endl;
        cout << "---------------------" << endl;

        send(c, LOGIN, sizeof(LOGIN), 0);

    close(c);
    close(s);
    return 0;
}
static const char*LOGIN=“LOGIN\n”;
int main()
{
int s=套接字(AF_INET,SOCK_STREAM,0);
地址中的结构sockaddr\u;
socklen_t addrlen=sizeof(addr);
//初始化结构
bzero(和addr,addrlen);
addr.sin_family=AF_INET;
地址:sin_端口=htons(6666);
addr.sin_addr.s_addr=htonl(INADDR_ANY);
绑定(s,(struct sockaddr*)和addr,addrlen);
听(s,1);
客户端地址中的结构sockaddr\u;
socklen\u t client\u addrlen=sizeof(client\u addr);
int c=接受(s,(结构sockaddr*)和客户机地址和客户机地址);
char*msg=新字符[15];
//打印客户端地址
char*buf=新字符[16];
inet_ntop(AF_inet和(客户地址sin_地址s_地址),buf,16);
不能你必须改变:

static const char *LOGIN = "LOGIN\n";
致:

并将呼叫发送至:

send(c, LOGIN, sizeof(LOGIN)-1, 0);
原始调用通过了4(如果在32位系统上),因为
sizeof
应用于指针而不是字符串。固定版本中的
-1
从字符串中减去终止的
'0'

您必须更改:

static const char *LOGIN = "LOGIN\n";
致:

并将呼叫发送至:

send(c, LOGIN, sizeof(LOGIN)-1, 0);

原始调用通过了4(如果在32位系统上),因为
sizeof
应用于指针而不是字符串。固定版本中的
-1
从字符串中减去终止的
'0'

一个好的开始是检查错误。所有这些系统调用都可能返回失败(它们返回值
-1
),在这种情况下,您应该检查出了什么问题。您可以使用例如打印消息,或使用从错误代码中获取可打印字符串。一个好的开始是检查错误。所有这些系统调用都可能返回失败(它们返回值
-1
),在这种情况下,您应该检查出了什么问题。您可以使用,例如,打印消息,或者使用从错误代码中获取可打印字符串。或者只使用
strlen
,或者只使用
strlen