客户端无法联接上服务器端

xiaoc10 2007-05-16 01:33:58
我在做一个多线程下载工具,客户端和服务器端都需实现
服务器端:
在Menu上有一个“服务器”选项,服务器下有一个“启动”选项。
在“启动”中响应以下函数
void CServerView::OnStart()
{
if(m_start)
{
CMainFrame* pWnd = ( CMainFrame* )AfxGetMainWnd();
CServerApp* pApp = ( CServerApp* )AfxGetApp();
DWORD dwthread;
sockaddr_in local;
SOCKET m_socket;

int rc=0;

m_socket=socket(AF_INET,SOCK_STREAM,0);
local.sin_family=AF_INET;
local.sin_port=htons(1028);
local.sin_addr.S_un.S_addr=htonl(INADDR_ANY);

rc = bind( m_socket, (LPSOCKADDR)&local, sizeof(local) );
::CreateThread( NULL, 0, listenthread, (LPVOID)m_socket, 0, &dwthread );
CString aaa;
aaa = "服务器启动!\n";

Message( aaa.GetBuffer(0), RGB(0, 0, 0 ) );//这是一个自己定义在窗口上输入文本信息的函数
aaa.ReleaseBuffer();
CString strT;
strT = "NetSwallow(测试版)----服务器已经启动,当前IP为" + pApp->m_strIp + " 开放端口号为1028";
pApp->m_pMainWnd->SetWindowText(strT);
m_start = FALSE;
}
else
{
CString aaa;
aaa = "服务器已经启动了!\n";

Message( aaa.GetBuffer(0), RGB(0,0,0));
aaa.ReleaseBuffer();
}
}

//监听线程
DWORD WINAPI listenthread(LPVOID lpparam)
{
SOCKET pthis = (SOCKET)lpparam;

int rc = listen(pthis, 30);
if( rc < 0 )
{
CString aaa;
aaa = "listen错误\n";
AfxGetMainWnd()->SendMessageToDescendants(WM_AGE1,(LPARAM)aaa.GetBuffer(0),1 );
aaa.ReleaseBuffer();
return 0;
}
while( 1 )
{
SOCKET s1;
s1 = accept( pthis, NULL, NULL );
CString aa;
aa = "一人联入!\n";
AfxGetMainWnd()->SendMessageToDescendants(WM_AGE1,(LPARAM)aa.GetBuffer(0),1 );
aa.ReleaseBuffer();
DWORD dwthread;
::CreateThread( NULL, 0, clientthread, (LPVOID)s1, 0, &dwthread );
}
return 0;
}



客户端:
同样有一个“联接”选项并有如下响应函数
void CClient1View::OnConnect()
{
CString aaa;

down[0]=new cdownload(0);//cdownload是一个下载类
int cc=down[0]->sendlist();
if(cc!=-1)
{
aaa="传圣(测试版) 1.0----客户端已启动";
pApp->m_pMainWnd->SetWindowText(aaa);
}
}

int cdownload::sendlist()
{
sockaddr_in local;
SOCKET m_socket;

int rc=0;
m_socket=socket(AF_INET,SOCK_STREAM,0);
local.sin_family=AF_INET;
local.sin_port=htons(1028);
local.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");

int ret=connect(m_socket,(LPSOCKADDR)&local,sizeof(local));
if(ret<0)
{
CString aaa;
aaa="服务器接不上!\n";
AfxGetMainWnd()->SendMessageToDescendants(WM_AGE1,(LPARAM)aaa.GetBuffer(0),1);
aaa.ReleaseBuffer();
closesocket(m_socket);
return -1;
}
return 1;
}

本人是个刚学vc++的新手,代码有点长,还希望大家帮帮忙。
谢谢了
...全文
205 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
healer_kx 2007-05-16
  • 打赏
  • 举报
回复
不知道,但是我看着费尽,你好多逻辑都混在一起写了,果然是初学啊。
zottff 2007-05-16
  • 打赏
  • 举报
回复
将线程中的这部分代码移到线程外
SOCKET pthis = (SOCKET)lpparam;

int rc = listen(pthis, 30);
if( rc < 0 )
{
CString aaa;
aaa = "listen错误\n";
AfxGetMainWnd()->SendMessageToDescendants(WM_AGE1,(LPARAM)aaa.GetBuffer(0),1 );
aaa.ReleaseBuffer();
return 0;
}
-----------------
......
rc = bind( m_socket, (LPSOCKADDR)&local, sizeof(local) );
<-移动到这儿
::CreateThread( NULL, 0, listenthread, (LPVOID)m_socket, 0, &dwthread );
xiaoc10 2007-05-16
  • 打赏
  • 举报
回复
自己先顶一哈

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧