CServerDlg::CServerDlg(CWnd* pParent /*=NULL*/)
: CDialog(CServerDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CServerDlg)
m_iPort = 4000;
m_oPort = 5000;
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_hSocket=0;
m_hSocket2=NULL;
pBuffer=NULL;
m_strFilePath="";
m_iSize=0;
bAppend=true;
}
void CServerDlg::InitSock()//
{
if(m_hSocket)//如果已经创建,先关闭
{
closesocket(m_hSocket);
m_hSocket=NULL;
}
else
{
m_hSocket=socket(AF_INET,SOCK_STREAM,0);
ASSERT(m_hSocket!=NULL);//
}
CString strError;
m_hSocket;
sockaddr_in addr;
addr.sin_family=AF_INET;//表示在INT上通信
addr.sin_addr.S_un.S_addr=INADDR_ANY;
addr.sin_port=htons(m_iPort);
int ret=0;
int error=0;
ret=bind(m_hSocket,(LPSOCKADDR)&addr,sizeof(addr));//
if(ret==SOCKET_ERROR)
{
strError.Format("Bind Error:%d ",error=WSAGetLastError());
AfxMessageBox(strError);
closesocket(m_hSocket);
return;
}
ret=listen(m_hSocket,10);//
if(ret==SOCKET_ERROR)
{
strError.Format("Listen Error:%d ",error=WSAGetLastError());
AfxMessageBox(strError);
closesocket(pDlg->m_hSocket);
return ;
}
else
{
m_cState.SetWindowText("服务端等待连接中...");
}
AfxBeginThread(ListenThread,this);
if(m_hSocket2)//如果已经创建,先关闭
{
closesocket(m_hSocket2);
m_hSocket2=NULL;
}
else
{
m_hSocket2=socket(AF_INET,SOCK_STREAM,0);
ASSERT(m_hSocket2!=NULL);//
}
m_hSocket2;
CString strIP;
pDlg->m_cSvrIP.GetWindowText(strIP);
sockaddr_in addr2;
addr2.sin_family=AF_INET;//表示在INT上通信
addr2.sin_addr.S_un.S_addr=inet_addr(strIP.GetBuffer(0));
addr2.sin_port=htons(m_oPort);
ret=connect(m_hSocket2,(LPSOCKADDR)&addr2,sizeof(addr2));//主动连接服务器
if(ret==SOCKET_ERROR)
{
strError.Format("Connect Error:%d ",error=WSAGetLastError());
AfxMessageBox(strError);
closesocket(m_hSocket2);
}
但是每当执行到ret=connect(m_hSocket2,(LPSOCKADDR)&addr2,sizeof(addr2))的时候都会出现连接错误10061,第2个连接无法实现,我发送——接收——发送现在都是在一台机器上测试,合这个有关系么?
}
8 个解决方案
#1
if(m_hSocket2)//如果已经创建,先关闭
{
closesocket(m_hSocket2);
m_hSocket2=NULL;
}
else
{
m_hSocket2=socket(AF_INET,SOCK_STREAM,0);
ASSERT(m_hSocket2!=NULL);//
}
你自己看下逻辑,假如已经创建了会怎么样.
10061 一般是参数设定错误.或者说目标根本没有提供该服务.
使用telnet 目标IP 目标端口 看看能不能连上. 连不上就说明你前面那个listen是无效的.
{
closesocket(m_hSocket2);
m_hSocket2=NULL;
}
else
{
m_hSocket2=socket(AF_INET,SOCK_STREAM,0);
ASSERT(m_hSocket2!=NULL);//
}
你自己看下逻辑,假如已经创建了会怎么样.
10061 一般是参数设定错误.或者说目标根本没有提供该服务.
使用telnet 目标IP 目标端口 看看能不能连上. 连不上就说明你前面那个listen是无效的.
#2
监听4000端口
再连接5000端口,5000端口有监听么
再连接5000端口,5000端口有监听么
#3
CServerDlg::CServerDlg(CWnd* pParent /*=NULL*/)
: CDialog(CServerDlg::IDD, pParent)
{
m_iPort = 4000;
m_oPort = 5000;
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_hSocket=0;
m_hSocket2=0;
pBuffer=NULL;
m_strFilePath="";
m_iSize=0;
bAppend=true;
}
因为之前在创建对话框的时候已经把m_hSocket2初始化为NULL了,所以程序应该直接执行
m_hSocket2=socket(AF_INET,SOCK_STREAM,0),还有我是在windows中执行程序,telnet能用么?因为是在同一个机子上测试,m_hSocket 和m_hSocket2都用的是相同的IP,只是端口不同,m_hSocket从创建到 listen都是正确的,为什么m_hSocket2就无法连接了啊?
: CDialog(CServerDlg::IDD, pParent)
{
m_iPort = 4000;
m_oPort = 5000;
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_hSocket=0;
m_hSocket2=0;
pBuffer=NULL;
m_strFilePath="";
m_iSize=0;
bAppend=true;
}
因为之前在创建对话框的时候已经把m_hSocket2初始化为NULL了,所以程序应该直接执行
m_hSocket2=socket(AF_INET,SOCK_STREAM,0),还有我是在windows中执行程序,telnet能用么?因为是在同一个机子上测试,m_hSocket 和m_hSocket2都用的是相同的IP,只是端口不同,m_hSocket从创建到 listen都是正确的,为什么m_hSocket2就无法连接了啊?
#4
这得开个线程吧
要不然怎么连?
要不然怎么连?
#5
的确是没有监听5000端口,我改改看
#6
端口没弄好
#7
可以的.
#8
ff
#1
if(m_hSocket2)//如果已经创建,先关闭
{
closesocket(m_hSocket2);
m_hSocket2=NULL;
}
else
{
m_hSocket2=socket(AF_INET,SOCK_STREAM,0);
ASSERT(m_hSocket2!=NULL);//
}
你自己看下逻辑,假如已经创建了会怎么样.
10061 一般是参数设定错误.或者说目标根本没有提供该服务.
使用telnet 目标IP 目标端口 看看能不能连上. 连不上就说明你前面那个listen是无效的.
{
closesocket(m_hSocket2);
m_hSocket2=NULL;
}
else
{
m_hSocket2=socket(AF_INET,SOCK_STREAM,0);
ASSERT(m_hSocket2!=NULL);//
}
你自己看下逻辑,假如已经创建了会怎么样.
10061 一般是参数设定错误.或者说目标根本没有提供该服务.
使用telnet 目标IP 目标端口 看看能不能连上. 连不上就说明你前面那个listen是无效的.
#2
监听4000端口
再连接5000端口,5000端口有监听么
再连接5000端口,5000端口有监听么
#3
CServerDlg::CServerDlg(CWnd* pParent /*=NULL*/)
: CDialog(CServerDlg::IDD, pParent)
{
m_iPort = 4000;
m_oPort = 5000;
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_hSocket=0;
m_hSocket2=0;
pBuffer=NULL;
m_strFilePath="";
m_iSize=0;
bAppend=true;
}
因为之前在创建对话框的时候已经把m_hSocket2初始化为NULL了,所以程序应该直接执行
m_hSocket2=socket(AF_INET,SOCK_STREAM,0),还有我是在windows中执行程序,telnet能用么?因为是在同一个机子上测试,m_hSocket 和m_hSocket2都用的是相同的IP,只是端口不同,m_hSocket从创建到 listen都是正确的,为什么m_hSocket2就无法连接了啊?
: CDialog(CServerDlg::IDD, pParent)
{
m_iPort = 4000;
m_oPort = 5000;
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_hSocket=0;
m_hSocket2=0;
pBuffer=NULL;
m_strFilePath="";
m_iSize=0;
bAppend=true;
}
因为之前在创建对话框的时候已经把m_hSocket2初始化为NULL了,所以程序应该直接执行
m_hSocket2=socket(AF_INET,SOCK_STREAM,0),还有我是在windows中执行程序,telnet能用么?因为是在同一个机子上测试,m_hSocket 和m_hSocket2都用的是相同的IP,只是端口不同,m_hSocket从创建到 listen都是正确的,为什么m_hSocket2就无法连接了啊?
#4
这得开个线程吧
要不然怎么连?
要不然怎么连?
#5
的确是没有监听5000端口,我改改看
#6
端口没弄好
#7
可以的.
#8
ff