winsock2发送和接收

时间:2014-05-04 22:25:40

标签: c++ send winsock2

我搜索论坛但找不到合适的答案。我要做一点登录程序,所以我希望发送数据在编辑框中作为登录,然后将数据作为密码发送到第二个编辑框中。

int ldata2 = send(Socket, buffs, len, 0);//send login via socket
//send pass via socket
int passData = send(Socket, buffPass, lenPass, 0);

以上说明由客户处理。在服务器端,当我打电话给recv时,就是这样:

int dt = recv(SocketM[i], 
                                        strings,
                                        128,
                                        0);

                        int errsock = WSAGetLastError();
                        if(errsock != WSAEWOULDBLOCK && errsock != 0)
                        {
                            std::cout << "ERR CODE " << errsock;
                            //shutdown(SocketM[Client]);
                            closesocket(SocketM[Client]);
                            break;
                        }
                        int passdt = recv(SocketM[i],
                                            passstrings,
                                            128,
                                            0);
                        std::cout << strings << std::endl;//Log and Password in the same buff :(
                        std::cout << passstrings //nothing in buffer why?

我从buffs中获取值字符串数据,并从buffPass获取数据,而不是仅从buffs获取exape:如果在登录编辑框中是&#34; Log&#34;在Pass编辑框中 - &#34; Pass&#34;我得到了LogPass 但我希望从日志到一个字符串的单独数据和从传递到第二个的数据。请帮我 请帮我。

1 个答案:

答案 0 :(得分:1)

TCP是一种字节流协议。如果你想分开消息,你可以通过分隔符,长度字前缀,自描述协议(如XML,类型 - 长度 - 值协议,......)来完成这些操作。

请注意,除非 错误,否则检查WSAGetLastError()无效:即在这种情况下recv()返回-1。