【发布时间】:2014-06-23 11:05:13
【问题描述】:
我正在尝试通过 SocketSource 和 SocketSink 发送字符串。但不知何故,它不能正常工作。我只是想将它从我的服务器发送到客户端。代码如下:
服务器:
CryptoPP::Socket server;
CryptoPP::Socket client;
sockaddr_in client_sadr;
CryptoPP::socklen_t size_sock = sizeof(sockaddr_in);
timeval timev = {3, 0};
std::string test("a simple test");
CryptoPP::Socket::StartSockets();
server.Create(SOCK_STREAM);
server.Bind(4213, NULL);
server.Listen();
server.Accept(client, (sockaddr*)&client_sadr, &size_sock);
std::cout << "Client connected" << std::endl;
while (!client.SendReady(&timev));
CryptoPP::StringSource ss(test, true, new CryptoPP::SocketSink(client));
std::cout << "Data sent" << std::endl;
std::cin.ignore();
client.CloseSocket();
server.CloseSocket();
CryptoPP::Socket::ShutdownSockets();
客户:
CryptoPP::Socket client;
CryptoPP::socklen_t size_sock = sizeof(sockaddr_in);
timeval timev = {3, 0};
std::string test;
Socket::StartSockets();
client.Create(SOCK_STREAM);
client.Connect("127.0.0.1", 4213);
std::cout << "connected" << std::endl;
while (!client.ReceiveReady(&timev));
CryptoPP::SocketSource(client, true, new StringSink(test));
std::cout << test << std::endl;
std::cin.ignore();
client.CloseSocket();
Socket::ShutdownSockets();
现在发生的情况:连接如愿建立,服务器发送数据,客户端接收数据并在 cin.ignore() 处等待。但是服务器在发送时似乎挂断了,因为它不会打印“数据发送”。它仅在客户端关闭连接时执行此操作。 我现在的问题是,我是不是做错了什么,或者这只是 SocketSource 和 SocketSink 的正常行为,我每次都必须重新连接......
感谢您的帮助:)
【问题讨论】:
标签: c++ windows sockets crypto++