【Clion+Pycharm 网络编程】C++实现服务端,Python实现客户端
生活随笔
收集整理的這篇文章主要介紹了
【Clion+Pycharm 网络编程】C++实现服务端,Python实现客户端
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
網(wǎng)絡通信,C/S模型(Client and Server)
工具:
C++工具: Clion
Python工具: Pycharm
g++: MingW
Python版本: python3.5
Python開發(fā)
Python開發(fā)會比較簡單。下面的代碼直接復制就可以看到了
from socket import * from time import ctimeHOST = '127.0.0.1' POST = 75 BUFSIZ = 1024 ADDR = (HOST, POST)tcpCliSock = socket(AF_INET, SOCK_STREAM) tcpCliSock.connect(ADDR)while True:data = tcpCliSock.recv(BUFSIZ)if not data:breakprint("[%s]: %s" % (ctime(), data.decode()))下面,我綁定的的是本地的75號端口。這個端口的服務將有C++(下面的代碼實現(xiàn))。
python的比較簡單,直接將上面的代碼copy,然后就可以直接運行了。
C++開發(fā)
這個稍微復雜點,但其實也比較簡單。
第一步,需要鏈接庫: winsock2.h
- 具體方法其實很簡單,在CmakeLists.txt中添加一些東西就好了。
寫上這句話
if(WIN32)target_link_libraries(Test wsock32 ws2_32) endif()第二步,就是敲代碼了….
#include <winsock2.h> #include <iostream> using namespace std; //#pragma comment(lib, 'WS2_32.lib')int main() {WSADATA data;WORD w = MAKEWORD(2, 0);char sztext[] = "Welcome";::WSAStartup(w, &data); // 初始化套接字庫SOCKET s, s1;s = ::socket(AF_INET, SOCK_STREAM, 0); // 創(chuàng)建套接字sockaddr_in addr, addr2;int n = sizeof(addr2);addr.sin_family = AF_INET; // 初始化地址結(jié)構(gòu)addr.sin_port = htons(75);addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");::bind(s, (sockaddr *) &addr, sizeof(addr));::listen(s, 5);cout << "Serve Running~\n";while (true) {s1 = ::accept(s, (sockaddr *) &addr2, &n);if (s1 != NULL) {cout << inet_ntoa(addr2.sin_addr) << " connected!\r\n";::send(s1, sztext, sizeof(sztext), 0); // 向客戶端發(fā)送字符數(shù)}::closesocket(s);::closesocket(s1);::WSACleanup();return 0;} }將上面的代碼拷貝一份就好了。可以直接運行的~
一些專有的函數(shù),前面用了::,在名空間中尋找對應的函數(shù)(估計是跟動態(tài)鏈接庫有關)
然后,這個代碼其實功能非常簡單,就是實現(xiàn)了一次鏈接,并且發(fā)個信息。
后記
最后,補充一點,傳輸數(shù)據(jù)的時候,在Python端接受信息的時候,很奇怪的是,會多一個什么奇怪的結(jié)尾。這個問題沒有解決。還是很迷惑的!
總結(jié)
以上是生活随笔為你收集整理的【Clion+Pycharm 网络编程】C++实现服务端,Python实现客户端的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【解决方案】Basemap安装出现的错误
- 下一篇: 【解决方案】VMWare拖动窗口后有黑色