意思是这样的,按了连接后监听 然后收发嘛 看网上说默认是阻塞的 但是我这个客户端先是给服务端发一个数字再发一个名字 服务端接收都没问题 然后给客户端回的时候瞬间就都发完了 客户端接收就是无限的一个相同的汉字(程序就死了) 不知道是连接断了还是说这是在飞阻塞状态呢。。 为什么会这样啊 求大侠分析
服务端点了连接之后:
if (!AfxSocketInit())
{
return 1;
}
m_exit = false;
CServer *aDlg = (CServer *)lParam;
UINT nPort = 6000; //端口号
CSocket sockConn, serverSocket;
if (!sockConn.Socket())
{
aDlg->m_ListWords.AddString("创建失败");
return 1;
}
BOOL bOptVal = TRUE;
int bOptLen = sizeof(BOOL);
sockConn.SetSockOpt(SO_REUSEADDR, (void *)&bOptVal, bOptLen, SOL_SOCKET);
if (!sockConn.Bind(nPort)) //绑定
{
aDlg->m_ListWords.AddString("绑定失败");
return 1;
}
if(!sockConn.Listen(10)) //监听 可以连10个客户端
{
aDlg->m_ListWords.AddString("监听失败");
return 1;
}
aDlg->m_ListWords.AddString("=====开始监听=====");
CFootballApp *app1=(CFootballApp *)AfxGetApp();
while(!m_exit) //没有退出的话
{
if(!sockConn.Accept(serverSocket)) //等待接入
{
continue;
}
else
{
char recvBuf[20];
serverSocket.Receive(recvBuf,1);
aDlg->m_ListWords.AddString("收到:"+recvBuf[0]);
switch(recvBuf[0])
{
case '1':{。。。
char sendBuf[20];
itoa(app1->c[i].cash,sendBuf,20);//转换数据类型
CString a;
a.Format("%d", app1->c[i].cash);
sockConn.Send(a, a.GetLength());
sockConn.Receive((void *)recvBuf, sizeof(recvBuf)); //收到确认后再继续发
。。。。。。。。。。。。。。
}
serverSocket.Close();
}
。。
客户端 点连接搜索后:
AfxSocketInit();
CSocket aSocket;
CString strIP="127.0.0.2";
int nPort = 6000;
if(!aSocket.Create())
{
MessageBox("error");
return;
}
if(aSocket.Connect(strIP, nPort))
{
char recvBuf[20] = {'\0'};
aSocket.Send("1", 1);
string name;
CEdit *edit=(CEdit *)GetDlgItem(IDC_NAME); //声明指向编辑框的指针
edit->GetWindowText(NAME);
name=NAME.GetBuffer(0);
aSocket.Send(name.c_str(), sizeof(name));//发送要查找的名字
aSocket.Receive((void *)recvBuf, sizeof(recvBuf));
if(recvBuf[0]!='!'){ //收到!代表没有找到此club
mark=1;
CString str;
CEdit *edit=(CEdit *)GetDlgItem(IDC_cash); //首先接收到的是cash
str.Format("%ch",recvBuf);
edit->SetWindowText(str);
aSocket.Send("ok", sizeof("ok")); //表示已接收 可继续发送
aSocket.Receive((void *)recvBuf, sizeof(recvBuf));
edit=(CEdit *)GetDlgItem(IDC_num); //接收到的是num
str.Format("%ch",recvBuf);
edit->SetWindowText(str);
aSocket.Send("ok", sizeof("ok"));
。。。。。。。。。。。。。。。。。。。
}
aSocket.Close();
}