c++ socket学习(1.3)
生活随笔
收集整理的這篇文章主要介紹了
c++ socket学习(1.3)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
本文學習相關資料:
C/C++ socket編程教程
環(huán)境:vs2015
源碼:本文代碼
在這里c++ socket學習(1.1)學到了怎么樣建立TCP,然后通過TCP連接發(fā)送、接收信息。
但是都是一次性的,當時是接收信息后就結束了,最多加個輸出把接收的信息打印出來,現(xiàn)在來看一下怎么一直接收信息,直到程序接收到退出命令。
服務端
其實很簡單,做個死循環(huán)就行了,這樣程序就會一直在接收客戶端發(fā)送過來的信息,直到客戶端發(fā)送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"); //說明要監(jiān)聽的ip地址 sockAddr.sin_port = htons(9000); //說明要監(jiān)聽的端口號 //IP和端口與套接字綁定起來,監(jiān)聽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)); //循環(huán) while (1) {std::string s;//連接std::cout << "請輸入內(nèi)容(長度為100個字符):";std::cin >> s;//這里就是發(fā)送數(shù)據(jù)了send(client, s.c_str(), s.size() + 1, 0);if (s.compare("exit") == 0) {break;} } //關閉套接字 closesocket(client);記得在程序開頭說明所用的winsock 版本號
總結
以上是生活随笔為你收集整理的c++ socket学习(1.3)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++ socket学习(1.2)
- 下一篇: 地下城与勇士怎么做无影剑