为何在同一台机子上传递信息,服务器接收的信息为空?顶者有分!解决思路
为何在同一台机子上传递信息,服务器接收的信息为空???顶者有分!!!!
客户端主要代码如下:
//用户信息的结构
typedef struct
{
long id;
char nickname[20];
char sex[10];
int age;
char address[50];
char password[20];
}USER_INF,*LPUSER_INF;
SOCKET sClient;
SOCKADDR_IN inetAddr;
USER_INF userInf;
sClient=socket(AF_INET, SOCK_STREAM, 0);
inetAddr.sin_addr.s_addr=inet_addr( "127.0.0.1 "); //联接本机的IP
inetAddr.sin_family=AF_INET;
inetAddr.sin_port=htons(SERVER_PORT);
if(connect( sClient, (struct sockaddr *)&inetAddr, sizeof (inetAddr)) == SOCKET_ERROR)
{
AfxMessageBox( "注册失败:不能连接Net服务器 ");
return ;
}
UpdateData(TRUE);
m_cbSex.GetLBText(m_cbSex.GetCurSel(), m_strSex);
if(m_strPwd != m_strVerifyPwd)
{
AfxMessageBox( "密码与确认密码不一致 ");
return ;
}
if(m_strNickname == _T( " ") || m_nAge==0 || m_strAddress==_T( " "))
{
AfxMessageBox( "请填充所有选项 ");
return ;
}
memset(&userInf,0,sizeof(USER_INF));
userInf.id = 0;
strcpy(userInf.nickname, (LPCTSTR)m_strNickname);
strcpy(userInf.sex, (LPCTSTR)m_strSex);
userInf.age = m_nAge;
strcpy(userInf.address, (LPCTSTR)m_strAddress);
strcpy(userInf.password, (LPCTSTR)m_strPwd);
//send "REGT "信息
memset(buff,0,sizeof(buff));
sprintf(buff, "%s ", "REGT ");
if(send(sClient,buff,sizeof(buff),0) == SOCKET_ERROR)
{
AfxMessageBox( "注册失败:REGT 信息 send 出错 ");
closesocket(sClient);
return ;
}
//send userInf
if(send(sClient,(char *)&userInf,sizeof(USER_INF),0) == SOCKET_ERROR) //USER_INF userInf已被赋值
{
AfxMessageBox( "注册失败:REGT userInf send 出错 ");
closesocket (sClient);
return ;
}
服务端主要代码如下:
//保存在线用户的结构
typedef struct
{
char ip[16]; //用户的IP地址
SOCKET sock;
UINT currentnumer; //当前用户排第几位
}ONLINEUSER_INF,*LPONLINEUSER_INF;
ONLINEUSER_INF userinfo;
USER_INF inf;
recv(userinfo.sock ,str,10,0); //userinfo.sock 为客户端的SOCKET
CString string;
string.Format ( "%s ",str);
if(string==_T( "REGT "))
{
memset(&inf,0,sizeof(USER_INF));
客户端主要代码如下:
//用户信息的结构
typedef struct
{
long id;
char nickname[20];
char sex[10];
int age;
char address[50];
char password[20];
}USER_INF,*LPUSER_INF;
SOCKET sClient;
SOCKADDR_IN inetAddr;
USER_INF userInf;
sClient=socket(AF_INET, SOCK_STREAM, 0);
inetAddr.sin_addr.s_addr=inet_addr( "127.0.0.1 "); //联接本机的IP
inetAddr.sin_family=AF_INET;
inetAddr.sin_port=htons(SERVER_PORT);
if(connect( sClient, (struct sockaddr *)&inetAddr, sizeof (inetAddr)) == SOCKET_ERROR)
{
AfxMessageBox( "注册失败:不能连接Net服务器 ");
return ;
}
UpdateData(TRUE);
m_cbSex.GetLBText(m_cbSex.GetCurSel(), m_strSex);
if(m_strPwd != m_strVerifyPwd)
{
AfxMessageBox( "密码与确认密码不一致 ");
return ;
}
if(m_strNickname == _T( " ") || m_nAge==0 || m_strAddress==_T( " "))
{
AfxMessageBox( "请填充所有选项 ");
return ;
}
memset(&userInf,0,sizeof(USER_INF));
userInf.id = 0;
strcpy(userInf.nickname, (LPCTSTR)m_strNickname);
strcpy(userInf.sex, (LPCTSTR)m_strSex);
userInf.age = m_nAge;
strcpy(userInf.address, (LPCTSTR)m_strAddress);
strcpy(userInf.password, (LPCTSTR)m_strPwd);
//send "REGT "信息
memset(buff,0,sizeof(buff));
sprintf(buff, "%s ", "REGT ");
if(send(sClient,buff,sizeof(buff),0) == SOCKET_ERROR)
{
AfxMessageBox( "注册失败:REGT 信息 send 出错 ");
closesocket(sClient);
return ;
}
//send userInf
if(send(sClient,(char *)&userInf,sizeof(USER_INF),0) == SOCKET_ERROR) //USER_INF userInf已被赋值
{
AfxMessageBox( "注册失败:REGT userInf send 出错 ");
closesocket (sClient);
return ;
}
服务端主要代码如下:
//保存在线用户的结构
typedef struct
{
char ip[16]; //用户的IP地址
SOCKET sock;
UINT currentnumer; //当前用户排第几位
}ONLINEUSER_INF,*LPONLINEUSER_INF;
ONLINEUSER_INF userinfo;
USER_INF inf;
recv(userinfo.sock ,str,10,0); //userinfo.sock 为客户端的SOCKET
CString string;
string.Format ( "%s ",str);
if(string==_T( "REGT "))
{
memset(&inf,0,sizeof(USER_INF));