Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.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++ C++;温索克慢_C++_Arrays_Sockets_Tcp_Winsock - Fatal编程技术网

C++ C++;温索克慢

C++ C++;温索克慢,c++,arrays,sockets,tcp,winsock,C++,Arrays,Sockets,Tcp,Winsock,我正在尝试使用套接字发送一个2D布尔数组。这个数组是254x5,所以有1270字节大。我每秒发送两个数组,从50到100次。这可能不是带宽问题,因为它也发生在LAN和127.0.0.1上,当刷新率(阵列每秒发送的次数)为100、50甚至30时,接收阵列所需的时间是相同的 以下是要发送的代码: if (Socket == INVALID_SOCKET) { std::cout << "Winsock error - Socket creation Failed!\r\n";

我正在尝试使用套接字发送一个2D布尔数组。这个数组是254x5,所以有1270字节大。我每秒发送两个数组,从50到100次。这可能不是带宽问题,因为它也发生在LAN和127.0.0.1上,当刷新率(阵列每秒发送的次数)为100、50甚至30时,接收阵列所需的时间是相同的

以下是要发送的代码:

if (Socket == INVALID_SOCKET)
{
    std::cout << "Winsock error - Socket creation Failed!\r\n";
    WSACleanup();
    system("PAUSE");
    return 0;
}
std::cout << "Enter Ip Address : ";
char ipaddress[20];
std::cin >> ipaddress;
std::cout << "Enter port number : ";
int portnumber;
std::cin >> portnumber;
struct hostent *host;
if ((host = gethostbyname(ipaddress)) == NULL)
{
    std::cout << "Failed to resolve hostname.\r\n";
    WSACleanup();
    system("PAUSE");
    return 0;
}
SOCKADDR_IN SockAddr;
SockAddr.sin_port = htons(portnumber);
SockAddr.sin_family = AF_INET;
SockAddr.sin_addr.s_addr = *((unsigned long*)host->h_addr);

// Attempt to connect to server
if (connect(Socket, (SOCKADDR*)(&SockAddr), sizeof(SockAddr)) != 0)
{
    std::cout << "Failed to establish connection with server\r\n";
    WSACleanup();
    system("PAUSE");
    return 0;
}


int res = send(Socket, (char*)&refresh, sizeof(refresh), 0);

if (res == sizeof(refresh))
    std::cout << "Refresh sent.";
else
{
    std::cout << res << " :("<<std::endl;
    std::cout<<WSAGetLastError();
}
char tr = 1;
setsockopt(Socket, IPPROTO_TCP, TCP_NODELAY, &tr, sizeof(tr));
在此接受:

SOCKADDR_IN serverInf;
serverInf.sin_family = AF_INET;
serverInf.sin_addr.s_addr = INADDR_ANY;
serverInf.sin_port = htons(8000);
int Socket = socket(PF_INET, SOCK_STREAM, 0);

if (Socket == INVALID_SOCKET)
{
    std::cout << "Winsock error - Socket creation Failed!\r\n";
    WSACleanup();
    system("PAUSE");
    return 0;
}

if (bind(Socket, (SOCKADDR*)(&serverInf), sizeof(serverInf)) == SOCKET_ERROR)
{
    std::cout << "Unable to bind socket!\r\n";
    WSACleanup();
    system("PAUSE");
    return 0;
}

listen(Socket, 1);

SOCKET TempSock = SOCKET_ERROR;
SOCKADDR taddr;
while (TempSock == SOCKET_ERROR)
{
    std::cout << "Waiting for incoming connections...\r\n";
    TempSock = accept(Socket, &taddr, NULL);
}

Socket = TempSock;

std::cout << "Client connected!\r\n\r\n";
int refresh;
char* pass;
char tr = 1;
setsockopt(Socket, IPPROTO_TCP, TCP_NODELAY, &tr, sizeof(tr));
recv(sock, (char*)&t, sizeof t, MSG_WAITALL);
现在我知道有些人会说1270字节,每秒200次太多了。是的,可能是因为它需要240 kb/s。但我的问题不是这样。我的问题是发送单个数组需要半秒钟。任务管理器说我只使用了1,6kb/s。为什么winsock不使用所有的bandwitdh,即使我使用127.0.0.1?我还对这两个程序应用了TCP\u NODELAY

setsockopt(Socket, IPPROTO_TCP, TCP_NODELAY, &tr, sizeof(tr));

有人知道为什么会这样?我应该使用UDP吗?提前感谢

请展示一些真实的代码,而不仅仅是无法编译的代码片段。但是你可能应该先看看WireShark,看看它是如何打包发送的。好吧,开始编辑..哦,你对
char
int
的使用可能是个问题:这是首选方式:
inti=1;setsockopt(iSock、IPPROTO_TCP、TCP_NODELAY、(char*)&i、sizeof(i))
首选方法是永远不要忽略错误检查的需要:)
setsockopt(Socket, IPPROTO_TCP, TCP_NODELAY, &tr, sizeof(tr));