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

歡迎訪問 生活随笔!

生活随笔

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

c/c++

c++ socket学习(1.3)

發布時間:2023/12/1 c/c++ 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++ socket学习(1.3) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文學習相關資料:
C/C++ socket編程教程

環境:vs2015
源碼:本文代碼

在這里c++ socket學習(1.1)學到了怎么樣建立TCP,然后通過TCP連接發送、接收信息。

但是都是一次性的,當時是接收信息后就結束了,最多加個輸出把接收的信息打印出來,現在來看一下怎么一直接收信息,直到程序接收到退出命令。

服務端

其實很簡單,做個死循環就行了,這樣程序就會一直在接收客戶端發送過來的信息,直到客戶端發送exit

sockaddr_in servSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);memset(&sockAddr, 0, sizeof(sockAddr));//初始化 sockAddr.sin_family = AF_INET; //同上,即使用ipv4 sockAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); //說明要監聽的ip地址 sockAddr.sin_port = htons(9000); //說明要監聽的端口號 //IP和端口與套接字綁定起來,監聽sockAddr設置的ip地址和端口號 bind(servSock, (SOCKADDR*)&sockAddr, sizeof(SOCKADDR)); listen(servSock, 20);sockaddr_in clntAddr; //初始化clntAddr memset(&clntAddr, sizeof(SOCKADDR), 0); //使用accept返回的套接字clntSock來與響應的客戶端進行交流,即響應客戶端的connect SOCKET clntSock = accept(servSock, (SOCKADDR*)&clntAddr, &nSize); while (1) {int len = recv(clntSock, buf, maxlen, 0);std::string s(buf);if (s.compare("exit") == 0) {std::cout << "接收到關閉信息,關閉服務器" << std::endl;break;}std::cout << s << std::endl; } //關閉套接字 closesocket(clntSock);

客戶端

SOCKET client = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);sockaddr_in servAddr; memset(&servAddr, 0, sizeof(sockaddr_in)); servAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); servAddr.sin_port = htons(9000); servAddr.sin_family = AF_INET;//連接到服務端 connect(client, (sockaddr*)&servAddr, sizeof(sockaddr_in)); //循環 while (1) {std::string s;//連接std::cout << "請輸入內容(長度為100個字符):";std::cin >> s;//這里就是發送數據了send(client, s.c_str(), s.size() + 1, 0);if (s.compare("exit") == 0) {break;} } //關閉套接字 closesocket(client);

記得在程序開頭說明所用的winsock 版本號

總結

以上是生活随笔為你收集整理的c++ socket学习(1.3)的全部內容,希望文章能夠幫你解決所遇到的問題。

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