我正在学习用winsock API写程序客户端 发送 本机机器名、本机IP、一个文件名、文件长度
服务器 接收 以上四项内容可是我每次只收到 机器名 ,其它的都收不到, 请各位指点------------服务器端 //sockRecv 已经建好 unsigned long cmd = 0;
if(ioctlsocket(sockRecv, FIONBIO, &cmd) == SOCKET_ERROR)
{
Log("%s Error in setting block, %d", WSAGetLastError());
return FALSE;
} int iReceiveCount = -1;
char buffer[1024]; //接收缓冲区 memset(buffer, 0, sizeof(buffer));
iReceiveCount = recv(sockRecv, buffer, sizeof(buffer), 0);//接收发送方机器名称
if(iReceiveCount < 0)
{
Log("%s Error in receiving data, %d", WSAGetLastError());
return false;
}
CString strClientName;
strClientName.Format("%s", buffer); memset(buffer, 0, sizeof(buffer));
iReceiveCount = recv(sockRecv, buffer, sizeof(buffer), 0);//接收发送方机器IP
if(iReceiveCount < 0)
{
Log("%s Error in receiving data, %d", WSAGetLastError());
return false;
}
CString strClientIP;
strClientIP.Format("%s", buffer); memset(buffer, 0, sizeof(buffer));
iReceiveCount = recv(sockRecv, buffer, sizeof(buffer), 0);//接收发送的文件名
if(iReceiveCount < 0)
{
Log("%s Error in receiving data, %d", WSAGetLastError());
return false;
}
CString strFileFullName;
strFileFullName.Format("g:\\data\\%s", buffer);
-------------客户端
char buffer[1024]; memset(buffer, 0, sizeof(buffer));
strcpy(buffer, m_strHostName);
sockSend.Send(buffer, m_strHostName.GetLength()+1); //发送主机名
memset(buffer, 0, sizeof(buffer));
strcpy(buffer, m_strHostIP);
sockSend.Send(buffer, m_strHostIP.GetLength()+1); //发送主机IP
const CString strFileName = file.GetFileName();
memset(buffer, 0, sizeof(buffer));
strcpy(buffer, strFileName);
sockSend.Send(buffer, strFileName.GetLength()+1); //发送文件名
long lLength = file.GetLength();
sockSend.Send(&lLength, sizeof(long)); //发送文件大小到接收方
服务器 接收 以上四项内容可是我每次只收到 机器名 ,其它的都收不到, 请各位指点------------服务器端 //sockRecv 已经建好 unsigned long cmd = 0;
if(ioctlsocket(sockRecv, FIONBIO, &cmd) == SOCKET_ERROR)
{
Log("%s Error in setting block, %d", WSAGetLastError());
return FALSE;
} int iReceiveCount = -1;
char buffer[1024]; //接收缓冲区 memset(buffer, 0, sizeof(buffer));
iReceiveCount = recv(sockRecv, buffer, sizeof(buffer), 0);//接收发送方机器名称
if(iReceiveCount < 0)
{
Log("%s Error in receiving data, %d", WSAGetLastError());
return false;
}
CString strClientName;
strClientName.Format("%s", buffer); memset(buffer, 0, sizeof(buffer));
iReceiveCount = recv(sockRecv, buffer, sizeof(buffer), 0);//接收发送方机器IP
if(iReceiveCount < 0)
{
Log("%s Error in receiving data, %d", WSAGetLastError());
return false;
}
CString strClientIP;
strClientIP.Format("%s", buffer); memset(buffer, 0, sizeof(buffer));
iReceiveCount = recv(sockRecv, buffer, sizeof(buffer), 0);//接收发送的文件名
if(iReceiveCount < 0)
{
Log("%s Error in receiving data, %d", WSAGetLastError());
return false;
}
CString strFileFullName;
strFileFullName.Format("g:\\data\\%s", buffer);
-------------客户端
char buffer[1024]; memset(buffer, 0, sizeof(buffer));
strcpy(buffer, m_strHostName);
sockSend.Send(buffer, m_strHostName.GetLength()+1); //发送主机名
memset(buffer, 0, sizeof(buffer));
strcpy(buffer, m_strHostIP);
sockSend.Send(buffer, m_strHostIP.GetLength()+1); //发送主机IP
const CString strFileName = file.GetFileName();
memset(buffer, 0, sizeof(buffer));
strcpy(buffer, strFileName);
sockSend.Send(buffer, strFileName.GetLength()+1); //发送文件名
long lLength = file.GetLength();
sockSend.Send(&lLength, sizeof(long)); //发送文件大小到接收方
2. windows发送出去的东西都组合在一起了,分几次接收没有用,一次就收完了。
strcat(buffer, ",");
sockSend.Send(buffer, m_strHostName.GetLength()+1); //发送主机名
struct host
{
本机机器名;
本机IP、一个文件名、文件长度
typedef struct struct_send
{
CString strServerName;
int nIP;
CString strFileName;
CString strFileLength;
};struct_send sendBuf;
sockSend.Send((char*)sendBuf, sizeof(struct_send));
接收的时候把接收到的buf用(struct_send*)buf就可以转换回来了