客户端无法联接上服务器端
我在做一个多线程下载工具,客户端和服务器端都需实现
服务器端:
在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++的新手,代码有点长,还希望大家帮帮忙。
谢谢了