MFC TCP/IP通讯 ,连接不上什么原因?

qq_32358455 2017-05-16 03:00:13
正在学通讯,下了一个简单的例子程序,直接用127.0.0.1本机测试没有问题;
可是我分别放在两台电脑上,就通讯不上,请问什么原因?
两台电脑之间都可以ping到
是程序的问题还是网络设置的问题;还是连接网线的问题(网线是平行接法,可以正常上网,需要交叉接吗)
试了好几个下载的程序,都一样,都是用(127.0.0.1)在本机可以;两台电脑连不上
用UDP的方式也是一样;








服务器端:
void CTCPServerDlg::OnSend()
{
// TODO: Add your control notification handler code here
UpdateData();
if(m_sockListen.Create(m_ServerPort,SOCK_STREAM,NULL)) //创建监听套接字
{
GetDlgItem(IDC_SEND)->EnableWindow(false); //启动按钮无效
GetDlgItem(IDC_STOP)->EnableWindow(true); //停止按钮生效
m_sockListen.Bind(m_ServerPort,m_ServerIP); //绑定本地套接口
if(m_sockListen.Listen())
{
m_ServerStatus="服务器处于监听状态";
UpdateData(false);
//等待连接请求,m_sockSend为发送套接字,用于通信
m_sockListen.Accept(m_sockSend);//阻塞,当有连接进入时,才返回
m_sockListen.Close();
SetTimer(1,3000,NULL); //创建一个定时器定时发送
}
}
else
{
AfxMessageBox("Socket创建失败!");
}
}

void CTCPServerDlg::OnStop()
{
// TODO: Add your control notification handler code here
KillTimer(1); //清除定时器
m_sockSend.Close(); //关闭发送套接字
m_ServerStatus="服务器停止发送数据";
UpdateData(false);
GetDlgItem(IDC_SEND)->EnableWindow(true); //发送按钮生效
GetDlgItem(IDC_STOP)->EnableWindow(false); //停止按钮无效
}

void CTCPServerDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
static iIndex=0; //静态变量,用于计数
char szSend[20];
sprintf(szSend,"%010d",iIndex++); //发送的数据置入缓冲区
//发送TCP数据
int iSend= m_sockSend.Send(szSend,10,0);
m_sendcount+=iSend;//发送字节数
CString str=szSend;
m_ServerStatus="正在发送数据"+str;
UpdateData(false);
CDialog::OnTimer(nIDEvent);
}


客户端程序

void CTCPClientDlg::OnReceive()
{
// TODO: Add your control notification handler code here
UpdateData();
if(m_sockReceive.Create()) //创建套接字
{
//发起连接请求
m_sockReceive.Connect(m_ServerIP,m_ServerPort);//连接服务器,成功后返回
SetTimer(1,1000,NULL); //创建一个定时器定时接收
m_ReceiveData="成功连接服务器!";
UpdateData(false);
GetDlgItem(IDC_RECEIVE)->EnableWindow(false); //接收按钮无效
GetDlgItem(IDC_STOP)->EnableWindow(true); //停止按钮生效
}
else
{
AfxMessageBox("Socket创建失败!");
}
}

void CTCPClientDlg::OnStop()
{
// TODO: Add your control notification handler code here
KillTimer(1); //关闭定时器
m_sockReceive.Close(); //关闭套接字
m_ReceiveData="停止接收数据!";
UpdateData(false);
GetDlgItem(IDC_RECEIVE)->EnableWindow(true); //接收按钮生效
GetDlgItem(IDC_STOP)->EnableWindow(false); //停止按钮无效
}

void CTCPClientDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
char szRecv[20];
int iRecv =m_sockReceive.Receive(szRecv,10,0);//接收TCP数据
if(iRecv>=0)
{
szRecv[iRecv]=NULL;
m_ReceiveData=szRecv; //记录接收数据
m_receivecount+=iRecv; //接收字节数
m_ReceiveData=m_ReceiveData;
}
else //如果没有接收到任何数据
{
m_ReceiveData="没有收到数据!";
}
UpdateData(false);
CDialog::OnTimer(nIDEvent);[code=c]

}[/code]

...全文
560 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_35238470 2017-07-25
  • 打赏
  • 举报
回复
求教!是把放火请关掉的意思吗??可是我关掉也不行啊。。。
qq_32358455 2017-05-16
  • 打赏
  • 举报
回复
引用 3 楼 cutmelon 的回复:
本机能通的话,检查服务端防火墙吧。。。
果真是防火墙的问题,把防火墙里面有关的都勾了就好了!!
zgl7903 2017-05-16
  • 打赏
  • 举报
回复
服务器端 IP 用 127.0.0.1 客户端 IP 用 服务器的IP地址 如 192.168.0.10
qq_32358455 2017-05-16
  • 打赏
  • 举报
回复
引用 2 楼 oyljerry 的回复:
客户端跟服务器端通信的端口,ip等是否匹配对了。
IP 端口都是一致的,但是不清楚端口号4800是否能用在这里
cutmelon 2017-05-16
  • 打赏
  • 举报
回复
本机能通的话,检查服务端防火墙吧。。。
oyljerry 2017-05-16
  • 打赏
  • 举报
回复
客户端跟服务器端通信的端口,ip等是否匹配对了。
大树学长 2017-05-16
  • 打赏
  • 举报
回复
UDP端口号不是67和68吗?

18,363

社区成员

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

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