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