我这个程序是客户端的,编译通过了,一按连接按钮,就要终止了,请帮我看一下这进程写的是不是有问题,谢谢!
UINT thread(LPVOID v)
{
char buff[100];
//定义数组用来预保存一些服务器的IP地址
char ServerIp[5][30]=
{
"192.168.103.185",
"192.168.103.187",
"192.168.103.130",
"192.168.103.132",
"192.168.103.135"
};
CSize size;
size.cx=0;
size.cy=30;
int s=1,addcount=0;
//获得对话框,CChat是基于formview的
CChat *clichat=(CChat*) AfxGetApp()->GetMainWnd(); clichat->m_connect.EnableWindow(false); clichat->m_disconnect.EnableWindow(true);
//连接服务器
         while(connect(clichat->clisock,(sockaddr *)&(clichat->cli),sizeof(clichat->cli))&&clichat->ee!=0)
{
clichat->m_client_talk.SetWindowText("等待"); //空循环
for(int i=0;i<=65000;i++)
for(int j=0;j<=200;j++); if(addcount==25)
addcount=0;
//如果不能连接成功,则连接下一个地址
clichat->cli.sin_addr.s_addr=inet_addr(ServerIp[addcount++]);
}
//如果连接成功,则显示相关信息
if(clichat->ee==1)
clichat->m_client_list.InsertItem(clichat->count++,"连接成功!");
//设定发送按钮为可用状态
clichat->m_client_send.EnableWindow(true);
clichat->SetForegroundWindow();
//循环获得数据
while(s!=SOCKET_ERROR && clichat->ee!=0)
{
//调用recv函数接收数据
s=recv(clichat->clisock,buff,100,0);
clichat->SetForegroundWindow();
//如果没有发生错误同时没有断开连接,则显示接收到的数据
if(s!=SOCKET_ERROR && clichat->ee!=0)
clichat->m_client_list.InsertItem(clichat->count++,buff);
clichat->m_client_list.Scroll(size);
}
//如果发生错误,或者认为断开连接,发送断开命令
send(clichat->clisock,"Disconnected",100,0);
//设定相关控件属性
clichat->m_client_send.EnableWindow(false);
clichat->m_connect.EnableWindow(true);
clichat->m_disconnect.EnableWindow(false);
//关闭Socket
closesocket(clichat->clisock);
//终止该线程
AfxEndThread(0);
return 0;
}

解决方案 »

  1.   

    我的连接按钮程序如下:
    void CChat::OnConnect() 
    {
    //定义变量以后以保存服务器地址
    char Ipaddress[35];
    //获得服务器地址
    m_server_ip.GetWindowText(Ipaddress,30);
    //设定Socket需要连接的地址
    cli.sin_addr.s_addr=inet_addr(Ipaddress);
    cli.sin_family=AF_INET;
    //设定服务器端口
    cli.sin_port=5000;
    //创建Socket
    clisock=socket(AF_INET,SOCK_STREAM,0);
    ee=1;
    //启动线程
    AfxBeginThread(thread,0);
    }
      

  2.   

    CChat *clichat=(CChat*) AfxGetApp()->GetMainWnd();估计要出问题,
    传指针进去吧
      

  3.   


    AfxBeginThread(thread,this);
      

  4.   

    //获得对话框,CChat是基于formview的
    CChat *clichat=(CChat*) AfxGetApp()->GetMainWnd();是不是出问题了?
    具体应该怎样解决呢?谢谢!在线等!
      

  5.   

    把你的线程做成类的函数
    static __stdcall UINT thread(LPVOID v);...创建的时候这样
    AfxBeginThread( thread, this );UINT
    CChat::thread( LPVOID v )
    {
          CChat *pForm = ( CChat* )v;
          pForm->....
    ...
    }