Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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++ 使用Winsock c++;_C++_Sockets_Bluetooth_Winsock_Winsock2 - Fatal编程技术网

C++ 使用Winsock c++;

C++ 使用Winsock c++;,c++,sockets,bluetooth,winsock,winsock2,C++,Sockets,Bluetooth,Winsock,Winsock2,我目前正在进行一个项目,尝试使用蓝牙和Winsock连接两台PC,我的想法是在它们之间建立一个服务器/客户端连接,并将一个字符串从客户端发送到服务器,但不幸的是,它没有像我预期的那样工作 当我运行服务器代码时,它一直在等待客户机请求,并且只在控制台中显示“Listen()正常!正在侦听连接”。当我运行客户端代码时,它会运行整个代码,直到它显示消息“WSACleanUp()工作正常”。我把两台电脑配对,因为我认为有必要这样做 我最初的猜测是客户端到服务器的连接不工作。我是Winsock新手,我正在

我目前正在进行一个项目,尝试使用蓝牙和Winsock连接两台PC,我的想法是在它们之间建立一个服务器/客户端连接,并将一个字符串从客户端发送到服务器,但不幸的是,它没有像我预期的那样工作

当我运行服务器代码时,它一直在等待客户机请求,并且只在控制台中显示“Listen()正常!正在侦听连接”。当我运行客户端代码时,它会运行整个代码,直到它显示消息“WSACleanUp()工作正常”。我把两台电脑配对,因为我认为有必要这样做

我最初的猜测是客户端到服务器的连接不工作。我是Winsock新手,我正在努力寻找能够帮助我解决这些问题的准确信息(除了以前发布的一些问题和来自windows的文档)

服务器代码

#include<iostream>
#include<WinSock2.h>
#include<ws2bth.h>
#include<bluetoothapis.h>
#include<stdio.h>   
#include<string>
#pragma comment (lib, "ws2_32.lib")

#define DEFAULT_BUFLEN 512
DEFINE_GUID(GUID_NULL, "00000000-0000-0000-0000-000000000000");

using namespace std;

void main()
{
    //INTIALIZE WINSOCK

    WSADATA wsData;
    WORD ver = MAKEWORD(2, 2);

    int wsOk = WSAStartup(ver, &wsData);
    if (wsOk != 0)
    {
        cerr << "Can't initialize winsok" << endl;
        return;
    }

    //CREATE A BLUETOOTH SOCKET

    SOCKET server = socket(AF_BTH, SOCK_STREAM, BTHPROTO_RFCOMM);

    if (server == INVALID_SOCKET)
    {
        cerr << "Can't create a socket" << endl;
        return;
    }
    else
    {
        cout << "> Server Socket created" << endl;
    }

    //AUTO ALLOCATION FOR SERVER CHANNEL 

    SOCKADDR_BTH hint;
    memset(&hint, 0, sizeof(hint));
    hint.addressFamily = AF_BTH;
    hint.port = 0;
    hint.btAddr = 0;
    hint.serviceClassId = GUID_NULL;

    //BINDING

    if (bind(server, (sockaddr*)&hint, sizeof(hint)) == SOCKET_ERROR)
    {
        cout << "Bind() failed with error code: " << WSAGetLastError() << endl;
        closesocket(server);
        return;
    }
    else
    {
        cout << "Bind() is ok" << endl;
        cout << "Waiting for client" << endl;
    }

    //LISTENNING 
    
    if (listen(server, SOMAXCONN) == 0)
    {
        cout << "Listen() is ok! Listening for connection" << endl;

    }
    else
    {
        cout << "Listen() failed with error code: " << WSAGetLastError() << endl;
        closesocket(server);
        return;
    }

//WAIT FOR CONNECTION

    SOCKADDR_BTH client;
    int clientSize;
    SOCKET clientSocket;

   for (;;)
    {
        clientSize = sizeof(client);
        clientSocket = accept(server, (sockaddr*)&client, &clientSize);
        if (clientSocket == INVALID_SOCKET)
        {
            cout << "Accept() failed with error code: " << WSAGetLastError() << endl;
            return;
        }
        else
        {
            cout << "Connection accepted" << endl;
            printf("Connection came from %04%08x to channel %d\n", GET_NAP(client.btAddr), GET_SAP(client.btAddr), client.port);
        }

    }
const char *sendbbuf = "Test data from receiver...";
    int recvbuflen = DEFAULT_BUFLEN;
    char recvbuf[DEFAULT_BUFLEN] = "";

    int bytesrec;

    do 
    {
        //ZeroMemory(buf, 4096);

        //WAIT FOR CLIENT TO SEND DATA

        bytesrec = recv(clientSocket, recvbuf, recvbuflen, 0);
        if (bytesrec > 0)
        {
            cout << " " << bytesrec << " Bytes received" << endl;
        }
        else if (bytesrec == 0)
        {
            cout << "Client disconnected" << endl;
        }
        else
        {
            cout << "recv() failed with error code: " << WSAGetLastError() << endl;
        }
} while (bytesrec > 0);
//ECHO MESSAGE BACK TO CLIENT

    bytesrec = send(clientSocket, recvbuf, bytesrec, 0);
    if (bytesrec == SOCKET_ERROR)
    {
        cout << "Sened() failed with error: " << WSAGetLastError() << endl;
        closesocket(clientSocket);
        WSACleanup();
        return;
    }
    else
    {
        cout << "Send() is ok" << endl;
        cout << "Bytes sent: " << bytesrec << endl;
    }
    if (closesocket(server) == 0)
    {
        cout << "CloseSocket is ok" << endl;
    }
    if (WSACleanup == 0)
    {
        cout << "WSACleanUp ok" << endl;
    }
    return;
}
#包括
#包括
#包括
#包括
#包括
#包括
#pragma注释(lib,“ws2_32.lib”)
#定义默认值\u BUFLEN 512
定义GUID(GUID为NULL,“00000000-0000-0000-0000-000000000000”);
使用名称空间std;
void main()
{
//初始化WINSOCK
WSADATA-wsData;
单词ver=MAKEWORD(2,2);
int wsOk=WSAStartup(版本和wsData);
如果(wsOk!=0)
{

cerr 1.您必须设置正确的sevrice UUID。2.您的套接字是同步的。您必须使用WSAEventSelect使其异步。3.您错过了setsockopt()。如何正确设置UUID?setsockopt()函数在绑定之前或之后运行?hint.serviceClassId=;setsockopt()-无论何时。关于UUID,我是否需要在客户端代码中指定UUID?或者它需要同时进入服务器和客户端?您必须在两侧提供服务的UUID。此外,您还需要设置RFCOMM通道号。它可以是BTPORT\u ANY。
#include<iostream>
#include<WinSock2.h>
#include<ws2bth.h>
#include<bluetoothapis.h>
#include<stdio.h>   
#include<string.h>
#pragma comment (lib, "ws2_32.lib")

#define DEFAULT_BUFLEN 512


using namespace std;

void main()
{
    //SERVER BLUETOOTH ADRESS

    //BTH_ADDR addr = 0xB0FC3616D3EE;
    
    //INTIALIZE WINSOCK

    WSADATA wsData;
    WORD ver = MAKEWORD(2, 2);

    int wsOk = WSAStartup(ver, &wsData);
    if (wsOk != 0)
    {
        cerr << "Can't initialize winsok" << endl;
        return;
    }

    //CREATE A BLUETOOTH SOCKET

    SOCKET client = socket(AF_BTH, SOCK_STREAM, BTHPROTO_RFCOMM);

    if (client == INVALID_SOCKET)
    {
        cerr << "Can't create a socket" << endl;
        WSACleanup();
        return;
    }
    else
    {
        cout << "Socket created" << endl;

    }

    //AUTO ALLOCATION FOR SERVER CHANNEL 

    SOCKADDR_BTH hint;
    memset(&hint, 0, sizeof(hint));
    hint.addressFamily = AF_BTH;
    hint.port = 0;
    hint.btAddr = BTH_ADDR(0xB0FC3616D3EE);
    hint.serviceClassId = HandsfreeServiceClass_UUID;


    int connResult = connect(client, (sockaddr*)&hint, sizeof(hint));
    if (connResult == SOCKET_ERROR)
    {
        cerr << "Can't connect to server, ERR #" << WSAGetLastError() << endl;
        closesocket(client);
        WSACleanup();
        return;
    }
    else
    {
        cout << "Connected" << endl;
    }

    const char *sendbuf = "Test data from client..";
    int recvbuflen = DEFAULT_BUFLEN;
    char recvbuf[DEFAULT_BUFLEN] = "";

    int res = send(client,sendbuf, (int)strlen(sendbuf), MSG_OOB);

    if (res == SOCKET_ERROR)
    {
        cout << "Send() failed with error code: " << WSAGetLastError() << endl;
        closesocket(client);
        WSACleanup();
        return;
    }
    else
    {
        cout << "Send() is ok" << endl;
        cout << "Bytes sent: " << res << endl;
    }
    res = shutdown(client, SD_SEND);
    if (res == SOCKET_ERROR)
    {
        cout << "Shutdown() failed with error code: " << WSAGetLastError() << endl;
        closesocket(client);
        WSACleanup();
        return;
    }
    else
    {
        cout << "Shutdown() is working" << endl;
    }

    //RECEIVE DATA

    do
    {
        res = recv(client, recvbuf, recvbuflen, 0);
        if (res > 0)
        {
            cout << " " << res << " Bytes received from sender" << endl;
        }
        else if (res == 0)
        {
            cout << "Client disconnected" << endl;
        }
        else
        {
            cout << "recv() failed with code: " << WSAGetLastError() << endl;
        }

    } while (res > 0);

    if (closesocket(client) == 0)
    {
        cout << "CloseSocket() works fine" << endl;
    }
    if (WSACleanup() == 0)
    {
        cout << "WSACleanUp() works fine" << endl;
    }