日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

vc socket api建立TCP连接(包括域名解析)并收发数据的代码模板

發(fā)布時間:2023/12/19 c/c++ 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 vc socket api建立TCP连接(包括域名解析)并收发数据的代码模板 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

VC和服務器建立TCP連接不像VB的winsock那樣兩三行代碼就能搞定。雖然VC得MFC類庫中也有CSocket、CAsyncSocket這樣的類,但是這些類的毛病太多,還是返璞歸真用socket api來的靈活。

每次用到都得查一遍流程,這次寫個幾乎通用的模板,以備以后用。

注:
1.因為socket只能傳入IP地址,所以要想連接還得先解析域名,以下包括把域名解析為IP的代碼。
2.以下代碼為阻塞模式(并非異步模式)所以在主線程中使用很可能阻塞程序運行,最好是新開個線程使用。

?

?? int retVal;
?? WORD wVersionRequested;
?? WSADATA wsaData;
?? int err;
?
//構建保存版本號的WORD類型變量
?? wVersionRequested = MAKEWORD( 1, 1 );
?
//加載套接字庫
?? err = WSAStartup( wVersionRequested, &wsaData );
?? if ( err != 0 ) {
??? return 0;
?? }
?
//檢查加載的套接字庫版本和請求的是否一致
?? if ( LOBYTE( wsaData.wVersion ) != 1 ||
??? HIBYTE( wsaData.wVersion ) != 1 ) {
??? WSACleanup( );
??? return 0;
?? }

?? //定義DWORD類型變量dwIP 該變量保存解析得到的IP地址(32位整數(shù) 并非點分十進制字符串)
DWORD dwIP = 0;
?? //域名解析
?? HOSTENT* pHS = gethostbyname(strdomain);
?? if(?? pHS?? !=?? NULL)??
?? {??
??? in_addr addr;??
??? CopyMemory(&addr.S_un.S_addr, pHS->h_addr_list[0], pHS->h_length);??
??? dwIP = addr.S_un.S_addr;??
?? }
?? else
?? {
??? WSACleanup();
??? return 0;
?? }

?? //創(chuàng)建套接字,第一個參數(shù)是地址族 TCP/IP下始終為AF_INET,第二個參數(shù)表示流式套接字,第三個參數(shù)指定協(xié)議,0表示系統(tǒng)自選協(xié)議 而對于流式套接字 系統(tǒng)的自選協(xié)議就是TCP協(xié)議
SOCKET sckTongJi = socket(AF_INET, SOCK_STREAM, 0);

?? //定義地址結構體 并初始化
SOCKADDR_IN addrSvr;
?? addrSvr.sin_family = AF_INET;
?? addrSvr.sin_addr.S_un.S_addr = dwIP; //inet_addr("127.0.0.1"); //字符串轉十六進制IP用inet_addr反之用inet_ntoa
?? addrSvr.sin_port = htons(80); //使用網絡字序 不同處理器高位在前 還是 低位在前不相同 在這兒統(tǒng)一

?? retVal = connect(sckTongJi, (SOCKADDR*)&addrSvr, sizeof(SOCKADDR_IN));
?? if (retVal)
?? {
??? //AfxMessageBox("connect error!");
??? WSACleanup();
??? return 0;
?? }
?? char strbuff[4096];

?? memset(strbuff, 0, sizeof(strbuff));
?? send(sckTongJi, strout, strout.GetLength(), 0);
?? recv(sckTongJi, strbuff, 4096, 0);
?? closesocket(sckTongJi);
?? WSACleanup();

?

?

?

?

轉載于:https://www.cnblogs.com/huhu0013/archive/2010/12/02/1894098.html

總結

以上是生活随笔為你收集整理的vc socket api建立TCP连接(包括域名解析)并收发数据的代码模板的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。