未能收听和连接 winsock2
failed to listen and connect winsock2
我的 Windows 套接字代码有问题,是使用 wxDev 用 C++ 编写的。下面代码的输出是:
Starting...
: Compatible...
: Created...
: Binding Done...
: Cannot listen...
: Error connecting...
:::Cleaned:::
我不知道为什么监听和连接失败。
代码
void serverFrm::serverClick(wxCommandEvent& event)
{
SOCKET sockh, socka;
WSADATA wsadata;
sockaddr_in sockAddr;
if (WSAStartup(MAKEWORD(2, 2), &wsadata) == 0) {
box->AppendText(_(" : Starting...\n"));
}
if (LOBYTE(wsadata.wVersion) >= 2) {
box->AppendText(_(" : Compatible...\n"));
}
sockh = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sockh != SOCKET_ERROR) {
box->AppendText(_(" : Created...\n"));
}
else {
box->AppendText(_(" : Error connecting...\n"));
}
sockAddr.sin_family = AF_INET;
sockAddr.sin_port = htons(6788);
sockAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
if (bind(sockh, (sockaddr*)(&sockAddr), sizeof(sockAddr)) != SOCKET_ERROR) {
box->AppendText(_(" : Binding Done...\n"));
}
else {
box->AppendText(_(" : Error binding...\n"));
}
if (listen(sockh, SOMAXCONN) != 0) {
box->AppendText(_(" : Listening...\n"));
}
else {
box->AppendText(_(" : Cannot listen...\n"));
}
int siz = sizeof(sockh);
if (accept(sockh, reinterpret_cast<sockaddr*>(&sockAddr), &siz) != SOCKET_ERROR) {
box->AppendText(_(" : Connected...\n"));
}
else {
box->AppendText(_(" : Error connecting...\n"));
}
closesocket(sockh);
if (WSACleanup() == 0)
box->AppendText(_(":::Cleaned:::\n"));
}
if(listen(sockh, SOMAXCONN)!=0)
This function returns 0
when it succeeds。你的条件检查是倒退的。
阅读文档,看在 Kahless 的份上,正确缩进您的代码。
我的 Windows 套接字代码有问题,是使用 wxDev 用 C++ 编写的。下面代码的输出是:
Starting...
: Compatible...
: Created...
: Binding Done...
: Cannot listen...
: Error connecting...
:::Cleaned:::
我不知道为什么监听和连接失败。
代码
void serverFrm::serverClick(wxCommandEvent& event)
{
SOCKET sockh, socka;
WSADATA wsadata;
sockaddr_in sockAddr;
if (WSAStartup(MAKEWORD(2, 2), &wsadata) == 0) {
box->AppendText(_(" : Starting...\n"));
}
if (LOBYTE(wsadata.wVersion) >= 2) {
box->AppendText(_(" : Compatible...\n"));
}
sockh = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sockh != SOCKET_ERROR) {
box->AppendText(_(" : Created...\n"));
}
else {
box->AppendText(_(" : Error connecting...\n"));
}
sockAddr.sin_family = AF_INET;
sockAddr.sin_port = htons(6788);
sockAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
if (bind(sockh, (sockaddr*)(&sockAddr), sizeof(sockAddr)) != SOCKET_ERROR) {
box->AppendText(_(" : Binding Done...\n"));
}
else {
box->AppendText(_(" : Error binding...\n"));
}
if (listen(sockh, SOMAXCONN) != 0) {
box->AppendText(_(" : Listening...\n"));
}
else {
box->AppendText(_(" : Cannot listen...\n"));
}
int siz = sizeof(sockh);
if (accept(sockh, reinterpret_cast<sockaddr*>(&sockAddr), &siz) != SOCKET_ERROR) {
box->AppendText(_(" : Connected...\n"));
}
else {
box->AppendText(_(" : Error connecting...\n"));
}
closesocket(sockh);
if (WSACleanup() == 0)
box->AppendText(_(":::Cleaned:::\n"));
}
if(listen(sockh, SOMAXCONN)!=0)
This function returns 0
when it succeeds。你的条件检查是倒退的。
阅读文档,看在 Kahless 的份上,正确缩进您的代码。