WSADATA WsaData;
SOCKET listener;
int err = WSAStartup (0x0202, &WsaData);
if (err == SOCKET_ERROR)
{
Memo1->Lines->Add("网络初始化失败.");
return;
}
if ((listener = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
{
Memo1->Lines->Add("WSASocket() failed with error");
return;
} unsigned long type=1;
err = ioctlsocket(listener,FIONBIO,(unsigned long*)&type);
if (err == SOCKET_ERROR)
{
Memo1->Lines->Add("ioctlsocket() failed with error");
return;
} SOCKADDR_IN addr_Srv;
addr_Srv.sin_family=AF_INET;
addr_Srv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
addr_Srv.sin_port=htons(9999); err = connect(listener,(SOCKADDR *)&addr_Srv,sizeof(SOCKADDR)); //这里调用会出错
if (err == SOCKET_ERROR)
{
Memo1->Lines->Add("connect() failed with error");
return;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
WSADATA WsaData;
SOCKET listener;
int err = WSAStartup (0x0202, &WsaData);
if (err == SOCKET_ERROR)
{
Memo1->Lines->Add("网络初始化失败.");
return;
}
if ((listener = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
{
Memo1->Lines->Add("WSASocket() failed with error");
return;
}
SOCKADDR_IN addr_Srv;
addr_Srv.sin_family=AF_INET;
addr_Srv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
addr_Srv.sin_port=htons(9999); err = connect(listener,(SOCKADDR *)&addr_Srv,sizeof(SOCKADDR)); //这里调用会出错
if (err == SOCKET_ERROR)
{
Memo1->Lines->Add("connect() failed with error");
return;
}
unsigned long type=1;
err = ioctlsocket(listener,FIONBIO,(unsigned long*)&type);
if (err == SOCKET_ERROR)
{
Memo1->Lines->Add("ioctlsocket() failed with error");
return;
}
这样写又没有问题,晕了.如果这样的调用顺序是对的,那后面怎么写呢?
SOCKET listener;
int err = WSAStartup (0x0202, &WsaData);
if (err == SOCKET_ERROR)
{
Memo1->Lines->Add("网络初始化失败.");
return;
}
if ((listener = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
{
Memo1->Lines->Add("WSASocket() failed with error");
return;
} unsigned long type=1;
err = ioctlsocket(listener,FIONBIO,(unsigned long*)&type);
if (err == SOCKET_ERROR)
{
Memo1->Lines->Add("ioctlsocket() failed with error");
return;
} SOCKADDR_IN addr_Srv;
addr_Srv.sin_family=AF_INET;
addr_Srv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
addr_Srv.sin_port=htons(9999); err = connect(listener,(SOCKADDR *)&addr_Srv,sizeof(SOCKADDR)); //这里调用会出错
if (err == SOCKET_ERROR)
{
Memo1->Lines->Add("connect() failed with error");
return;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
WSADATA WsaData;
SOCKET listener;
int err = WSAStartup (0x0202, &WsaData);
if (err == SOCKET_ERROR)
{
Memo1->Lines->Add("网络初始化失败.");
return;
}
if ((listener = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
{
Memo1->Lines->Add("WSASocket() failed with error");
return;
}
SOCKADDR_IN addr_Srv;
addr_Srv.sin_family=AF_INET;
addr_Srv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
addr_Srv.sin_port=htons(9999); err = connect(listener,(SOCKADDR *)&addr_Srv,sizeof(SOCKADDR)); //这里调用会出错
if (err == SOCKET_ERROR)
{
Memo1->Lines->Add("connect() failed with error");
return;
}
unsigned long type=1;
err = ioctlsocket(listener,FIONBIO,(unsigned long*)&type);
if (err == SOCKET_ERROR)
{
Memo1->Lines->Add("ioctlsocket() failed with error");
return;
}
这样写又没有问题,晕了.如果这样的调用顺序是对的,那后面怎么写呢?
如果WSAGetLastError()==WSAEWOULDBLOCK,表示该次操作也是成功的建议LZ先看看书
之后这样处理:
while (WSAEWOULDBLOCK == WSAGetLastError())
{
sleep(10); // 这里,返回WSAEWOULDBLOCK错误值并非连接失败,所以你需要继续等待,直到成功
}
if(0 != WSAGetLastError()) // 如果还未成功,即连接失败了
{
...// 连接失败
}
else
{
...// 连接成功
}
{
sleep(10); // 这里,返回WSAEWOULDBLOCK错误值并非连接失败,所以你需要继续等待,直到成功
}这样之后就一直while,跳不出去了怎么回事谁有源码啊,服务端是正常的,用工具自带的SOCKET类可以链接发送接收信息