gpt4 book ai didi

c++ - Winsock 发送一个字符串

转载 作者:太空狗 更新时间:2023-10-29 21:19:26 32 4
gpt4 key购买 nike

我会尝试向客户端发送一个像“hello world”这样的字符串,但是我只能在一个vector char []中发送“hello”的第一部分,我该如何发送一个字符串?

send(client, win, strlen(win), 0);

win是一个char[],可以是一个字符串吗?

完整代码为:

  int main(int argc, const char* argv[])
{
WSADATA wsadata;
int error = WSAStartup (0x0202, &wsadata);
if(error == 1) return 1;
std::cout << "WSA started";
SOCKET connessione;
sockaddr_in target;
target.sin_family = AF_INET;
target.sin_port = htons (9000);
target.sin_addr.s_addr = inet_addr("127.0.0.1");
target.sin_port = htons((u_short)9001);
connessione = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (connessione == INVALID_SOCKET)
{

std::cout << "Error socket";
system("pause>null");
return INVALID_SOCKET;
}
std::cout << "\nSocket create";
if(bind(connessione, (sockaddr*)&target, sizeof(target)) != 0) return 0;
if(listen(connessione, 10) != 0) return 0;
SOCKET client;
sockaddr_in from;
int fromlen = sizeof(from);
std::cout << "\nWait the client connection...";
client = accept(connessione, (sockaddr*)&from, &fromlen);
std::cout << "\nClient connect";
std::string win;

std::cout << "\n\nInsert text to send: ";
std::cin >> win;

send(client, win, strlen(win), 0);
std::cout << "\ntext send ok. FINE";
Sleep(2000);
system("pause>null");
closesocket(connessione);
closesocket(client);
WSACleanup();
return 0;
}

最佳答案

转换为 char 数组可能是您正在寻找的:

send(client, win.c_str(), win.size(), 0);

另外如前所述,您应该检查返回值(以检测任何可能的错误)并记住 sendrecv 并不总是发送/接收第一次尝试所有数据(您必须循环直到发送/接收整个数据)。

编辑:>> 运算符在看到分隔符(空格、换行符等)时停止读取。如果你想阅读整行你可以这样做:

std::getline(std::cin, win);

关于c++ - Winsock 发送一个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27318411/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com