| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 553 人关注过本帖
标题:网络通信聊天问题
只看楼主 加入收藏
wxliang
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2006-1-22
收藏
 问题点数:0 回复次数:3 
网络通信聊天问题
我班有个同学写了一个聊天程序,出了点问题,我自己帮搞了好久,都搞不出来,现在发到网上,求高人帮忙看看,是什么问题
  这是服务端的:
    bl_startup = true;
    m_stateitem.ResetContent();
    HANDLE h_gThread;
    WSADATA wsa;
   
    WORD wsa_res = WSAStartup(0x0101,&wsa);
    int res = WSAStartup(wsa_res,&wsa);
    struct sockaddr_in socket_local,socket_remote;
    if(res == -1)
    {
    }
    sListen = socket(AF_INET,SOCK_STREAM,0);
    if(sListen == INVALID_SOCKET)
    {
    }
   
    socket_local.sin_family = AF_INET;
    socket_local.sin_port = htons(8080);
    socket_local.sin_addr.S_un.S_addr = INADDR_ANY;
    int bind_res = bind(sListen,(struct sockaddr*)&socket_local,sizeof(socket_local));
    if(bind_res == SOCKET_ERROR)
    {
    }
    if(listen(sListen,SOMAXCONN) == SOCKET_ERROR)
    {
    }
    m_stateitem.AddString("服务程序启动成功");
    m_startup.EnableWindow(false);
    m_stop.EnableWindow(true);
    int addrlen = sizeof(socket_remote);
    while(true == bl_startup)
    {
        sClient = accept(sListen,(struct sockaddr*)&socket_remote,&addrlen);
        if(sClient == INVALID_SOCKET)
        {
        }
   
        h_gThread=CreateThread(NULL,0,begin_accept_thread,(LPVOID)&sClient,0,NULL);
        CloseHandle(h_gThread);
      
    }

//线程函数
DWORD WINAPI CMcchangeportDlg::begin_accept_thread(LPVOID lpPara)
{
    int rec;
    SOCKET sClient = *((SOCKET*)lpPara);
    char buff[500];
   
   
    rec = recv(sClient,buff,sizeof(buff),0);
   
    if(rec > 0)
    {
      ...................
      send(sClient, buff, sizeof(buff), 0);
    }
}

现在说说问题:当server程序启动后,如果用另外两台电脑(A,B机)各for,1000次,缶主机发送,主机接收到后进行处理后,返回给所发送的机 子,当A,B各开发for发送时,主机最多同时能接到A,B发送的四五十次数据,之后,其中有一台的发送,将会被主机不给予处理。我可能没说明白,大意就 是:A发送到50次时,B开始发送,主机这时能接收A,B所能发送的数据,但只能接到到40几次后,便不会对其中一台做出响应(即可能B机只for 到100次时,就没反应了)


请原因,即处理方式
搜索更多相关主题的帖子: 聊天 通信 网络 
2009-11-23 11:34
wxliang
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2006-1-22
收藏
得分:0 
如果我在创建线程时加一个h_gThread=CreateThread(NULL,0,begin_accept_thread,(LPVOID)&sClient,0,NULL);
        Sleep(N)
让程序暂时N毫秒,问题会得到解决,但是,如果在创建一个线程,到这个线程运行到结束的时超过了这个N毫秒,我相信这样的问题又会出现
      
2009-11-23 11:48
我爱好
Rank: 1
等 级:新手上路
帖 子:5
专家分:7
注 册:2009-10-25
收藏
得分:0 
我想问一下,想要编出这样的一些程序,需要懂什么知识,我们学完了C++,但这程序我有些看不懂啊,请教请教
2009-11-23 21:52
我爱好
Rank: 1
等 级:新手上路
帖 子:5
专家分:7
注 册:2009-10-25
收藏
得分:0 
我想问一下,想要编出这样的一些程序,需要懂什么知识,我们学完了C++,但这程序我有些看不懂啊,请教请教
2009-11-23 21:53
快速回复:网络通信聊天问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.011946 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved