1. 是否能mfc同时2个tcp通信
肯定是可以的。
你可以建立两个tcp连接就是了。
mfc只是一个基础类库,和具体的网络连接没有关系的。
你可以把TCP连接做成一个类。到时候声明两个对象,分别处理就行了。
2. MFC中CSocket怎么实现两个客户端的连接
如果都在公网的话,客户端直接在服务器注册IP和端口,其他客户端根据这个直接连接即可。
如果两个客户端都在内网,需要打洞。
3. TCP协议的服务器和客户端的配对问题
可以使用telnet命令代替那个助手,测试服务端是否可连接,
如果能telnet能连上,至少说明服务端服务端口在正常监听,
如果telnet连接失败,说明服务端有问题。
网络调试助手没用过,你用它随便连接一个网站的80端口试试,看你的用法是不是正确。
4. mfc的TCP连接的双向通信程序 服务器端的accept函数怎么写
//服务端:
//服务器接受线程数据
UINT CTcpSrvDlg::ReThreadFunc(LPVOID lParam)
{
CTcpSrvDlg *pDlgSrv = (CTcpSrvDlg*)lParam;
WORD wVersionRequested;//当前网络Socket版本号
WSADATA wsaData;//定义当前网络信息对象
int err;
int iError ;
CString str;
wVersionRequested = MAKEWORD( 1, 1 );//(1.1)版本
//===1、初始化网络设备环境===
err = WSAStartup( wVersionRequested, &wsaData );
//如果WSAStartup返回值为0,则初始化成功
if ( err != 0 )
{
return 1L;
}
//如果网络环境版本不对应,则清空网络设备环境并结束当前线程
if ( LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) != 1 )
{
AfxMessageBox("版本不匹配");
//清空网络设备环境
::WSACleanup();
return 1L;
}
//===2、加载套接字===
SOCKET socketSvr = ::socket(AF_INET/*通信区域*/, SOCK_STREAM/*数据流式——TCP*/, 0);
if (INVALID_SOCKET == ::WSAGetLastError())
{
AfxMessageBox("加载套接字失败");
::WSACleanup();
::closesocket(socketSvr);
return 1L;
}
//===3、套接字绑定
//初始化当前主机地址信息结构体对象
SOCKADDR_IN addSrv;
addSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);//允许任何IP的主机与之相连
addSrv.sin_family = AF_INET;//通信网际域
addSrv.sin_port = htons(7000);//0——65355端口,自定义要大一些>1000
iError = ::bind(socketSvr, (SOCKADDR*)&addSrv, sizeof(SOCKADDR_IN));
//校验是否绑定成功
if (SOCKET_ERROR == iError)
{
AfxMessageBox("套接字绑定失败");
::WSACleanup();
::closesocket(socketSvr);
return 1L;
}
//===监听===
iError = ::listen(socketSvr, SOMAXCONN/*等待连接堆内的最大来访者个数,
如果设置为SOMAXCONN,
则下层的服务提供者负责将套接字设置backlog值为最大的合理的值。*/
);
if (SOCKET_ERROR == iError)
{
AfxMessageBox("监听失败");
::WSACleanup();
::closesocket(socketSvr);
return 1L;
}
//===5、接受请求的客户机的套接字信息===
SOCKET sockClient;
SOCKADDR_IN addrClient;
int iAddrLen = sizeof(SOCKADDR_IN);
while (1)
{
//接受对方的套接字信息
::accept(socketSvr/*服务器接受*/, (SOCKADDR*)&addrClient, &iAddrLen);
//===6、接受客户端发过来的数据===
char recvBuf[100];
iError = ::recv(sockClient, recvBuf, 100, 0);
if(SOCKET_ERROR == iError)
{
AfxMessageBox("数据接受失败");
}
//将接受过来的数据显示ListBox中
str.Format("%s",recvBuf);
pDlgSrv->m_lbRecv.AddString(str);
}
::closesocket(socketSvr);
::WSACleanup();
return 1L;
}
5. 如何用MFC实现两个客户端之间的点对点通信(不借助服务器)
我不明白LZ的这句话->不是主机显示的那4个双字节的IP地址,而是一个更长的数字
IP地址是4个双字节的IP地址 如果该客户机是位于一个局域网里 那么就会有2IP地址 内网IP 外网IP 网络中的客户IP当然是使用外网IP 整么会不是呢?
实现P2P的方法
把服务器简单称为S 客户端为C
第一种情况 当C1与C2同时都位于外网的时候 那么C1可以直接向C2发送信息 C2也可以直接向C1发送信息
第二种情况 当C1位于外网 而C2 是在一个局域网里的时候 C2可以直接向C1发信息 C1能收到 而C1向C2发送信息到达LAN的时候那么 传送信息包里的端口就会被改变 C2就无法接受到该信息 如果要让C2能接受到信息 那么C2就要先发送一个信息给C1 这个时候C2就打上了一个洞 能让C1 的指定端口发送信息到C2 这样C2就能接受到该信息
第三种情况 也是最难的 C1与C2 分别位于不同的局域网了 那么就需要C1与C2先向服务器发送信息打洞 然后各自向对方的洞里发送一个信息 然后就可以实现P2P了
以上就是所谓的打洞技术
6. MFC中,怎样实现一客户端与多个服务器连接并收发数据
再创建一个线程,用新创建的线程去连接新的服务器,要连几个服务器就创建几个线程,用主线程来调度就行了,至于怎么创建线程,你就去找相应的教程吧。
7. mfc连接互联网方法
1、反向连接,即内网主动发起连接;
2、建议你搜索“TCP打洞”
8. mfc中套接字怎么在两个电个电脑之间通讯
飞鸽传书的源代码就可以。
看下系统的网络组件是否已安装完全在桌面上选定网上邻居,点右键打开其属性,在配置列表中是否有如下几项realtek8139networkadapter(网卡),microsoft网络客户(服务),tcp/ip协议(协议),microsoft网络上的文件与打印机共享服务(服务)。要连接一个局域网并共享资源,以上组件是必不可少的,如果没有可在此处直接添加。然后是设置ip地址。
局域网是指在某一区域内由多台计算机互联成的计算机组。一般是方圆几千米以内。局域网可以实现文件管理、应用软件共享、打印机共享、工作组内的日程安排、电子邮件和传真通信服务等功能。局域网是封闭型的,可以由办公室内的两台计算机组成,也可以由一个公司内的上千台计算机组成。
9. 一个TCP端口怎么同时连接多个服务器
一个端口可以同时进行多个联接,这里面有多个模型可供选择,最好的模型IOCP模型。你还是应该找些书来看一下。
10. MFC实现多个客户端连接服务器。tcp协议
服务器接收多个客户端链接,可以把客户端标识保存在map中
map<SOCKET, ClientInfo>
因为调用accept返回的SOCKET其实就是int