这段代码是用在完成端口上的typedef struct
{
LPWSAOVERLAPPED OVerlapped;
WSABUF DATABuf;
CHAR Buffer[8192];
DWORD BytesSend,BytesRecv;
}PER_IO_OPERATION_DATA, *LPPER_IO_OPERATION_DATA;LPPER_IO_OPERATION_DATA PerIOData; ZeroMemory(&(PerIOData->OVerlapped),sizeof(LPWSAOVERLAPPED)); //这为什么老过不去啊
PerIOData->BytesRecv = 0;
PerIOData->BytesSend = 0;
PerIOData->DATABuf.len = 8192;
PerIOData->DATABuf.buf = PerIOData->Buffer;if (WSARecv(Server,&(PerIOData->DATABuf),1,&RecvBytes,&Flags,PerIOData->OVerlapped,NULL) == SOCKET_ERROR)
{
if (WSAGetLastError() != ERROR_IO_PENDING)
{
Memo1->Lines->Add("WSARecv() failed with error"+GetLastError());
return;
}
}
{
LPWSAOVERLAPPED OVerlapped;
WSABUF DATABuf;
CHAR Buffer[8192];
DWORD BytesSend,BytesRecv;
}PER_IO_OPERATION_DATA, *LPPER_IO_OPERATION_DATA;LPPER_IO_OPERATION_DATA PerIOData; ZeroMemory(&(PerIOData->OVerlapped),sizeof(LPWSAOVERLAPPED)); //这为什么老过不去啊
PerIOData->BytesRecv = 0;
PerIOData->BytesSend = 0;
PerIOData->DATABuf.len = 8192;
PerIOData->DATABuf.buf = PerIOData->Buffer;if (WSARecv(Server,&(PerIOData->DATABuf),1,&RecvBytes,&Flags,PerIOData->OVerlapped,NULL) == SOCKET_ERROR)
{
if (WSAGetLastError() != ERROR_IO_PENDING)
{
Memo1->Lines->Add("WSARecv() failed with error"+GetLastError());
return;
}
}
sizeof(WSAOVERLAPPED)
例如 PER_IO_OPERATION_DATA PerIOData; 当然这样下面的语句也要把-> 改成 .要么就分配空间
LPPER_IO_OPERATION_DATA PerIOData = new PER_IO_OPERATION_DATA; 但记得使用完后释放空间。
delete PerIOData;