TCP收發信息(C++)

目錄

一、介紹

二、收數據

三、發數據


?

一、介紹

tcp和udp的區別之一,即tcp是有連接的,udp是無連接的,udp收發數據的代碼可以獨立運行,tcp發數據前必須確保收數據的一方是打開的,否則無法建立連接。

二、收數據

tcpRecv.h

#pragma once
#include<iostream>
#include<winsock.h>
#pragma comment(lib,"ws2_32.lib")
using namespace std;class tcpRecv
{
public:tcpRecv();~tcpRecv();void initialization();void recvData();
public://定義發送緩沖區和接受緩沖區char send_buf[100];char recv_buf[100];//定義服務端套接字,接受請求套接字SOCKET s_server;SOCKET s_accept;//服務端地址客戶端地址SOCKADDR_IN server_addr;SOCKADDR_IN accept_addr;
};

?tcpRecv.cpp

#include "tcpRecv.h"tcpRecv::tcpRecv()
{initialization();//填充服務端信息server_addr.sin_family = AF_INET;server_addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);server_addr.sin_port = htons(14555);//創建套接字s_server = socket(AF_INET, SOCK_STREAM, 0);if (bind(s_server, (SOCKADDR *)&server_addr, sizeof(SOCKADDR)) == SOCKET_ERROR) {cout << "套接字綁定失敗!" << endl;WSACleanup();}else {cout << "套接字綁定成功!" << endl;}//設置套接字為監聽狀態if (listen(s_server, SOMAXCONN) < 0) {cout << "設置監聽狀態失敗!" << endl;WSACleanup();}else {cout << "設置監聽狀態成功!" << endl;}cout << "服務端正在監聽連接,請稍候...." << endl;//接受連接請求int len = sizeof(SOCKADDR);s_accept = accept(s_server, (SOCKADDR *)&accept_addr, &len);if (s_accept == SOCKET_ERROR) {cout << "連接失敗!" << endl;WSACleanup();}cout << "連接建立,準備接受數據" << endl;
}tcpRecv::~tcpRecv()
{//關閉套接字closesocket(s_server);closesocket(s_accept);//釋放DLL資源WSACleanup();
}void tcpRecv::initialization() {//初始化套接字庫WORD w_req = MAKEWORD(2, 2);//版本號WSADATA wsadata;int err;err = WSAStartup(w_req, &wsadata);if (err != 0) {cout << "初始化套接字庫失敗!" << endl;}else {cout << "初始化套接字庫成功!" << endl;}//檢測版本號if (LOBYTE(wsadata.wVersion) != 2 || HIBYTE(wsadata.wHighVersion) != 2) {cout << "套接字庫版本號不符!" << endl;WSACleanup();}else {cout << "套接字庫版本正確!" << endl;}//填充服務端地址信息}void tcpRecv::recvData() {//接收數據int recv_len = recv(s_accept, recv_buf, 100, 0);if (recv_len < 0) {cout << "接受失敗!" << endl;}else {cout << "接收信息為:" << recv_buf << endl;}
}

?main.cpp

#include "tcpRecv.h"int main() {tcpRecv tcp;while (1) {tcp.recvData();}return 0;
}

三、發數據

tcpSend.h

#pragma once
#include<iostream>
#include<string>
#include<winsock.h>
#pragma comment(lib,"ws2_32.lib")
using namespace std;class tcpSend
{
public:tcpSend();~tcpSend();void initialization();void sendData(std::string&data);
public://定義服務端套接字,接受請求套接字SOCKET s_server;//服務端地址客戶端地址SOCKADDR_IN server_addr;
};

?tcpSend.cpp

#include "tcpSend.h"tcpSend::tcpSend()
{initialization();//填充服務端信息server_addr.sin_family = AF_INET;server_addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");server_addr.sin_port = htons(14555);//創建套接字s_server = socket(AF_INET, SOCK_STREAM, 0);if (connect(s_server, (SOCKADDR *)&server_addr, sizeof(SOCKADDR)) == SOCKET_ERROR) {cout << "服務器連接失敗!" << endl;WSACleanup();}else {cout << "服務器連接成功!" << endl;}
}tcpSend::~tcpSend()
{//關閉套接字closesocket(s_server);//釋放DLL資源WSACleanup();
}void tcpSend::initialization() {//初始化套接字庫WORD w_req = MAKEWORD(2, 2);//版本號WSADATA wsadata;int err;err = WSAStartup(w_req, &wsadata);if (err != 0) {cout << "初始化套接字庫失敗!" << endl;}else {cout << "初始化套接字庫成功!" << endl;}//檢測版本號if (LOBYTE(wsadata.wVersion) != 2 || HIBYTE(wsadata.wHighVersion) != 2) {cout << "套接字庫版本號不符!" << endl;WSACleanup();}else {cout << "套接字庫版本正確!" << endl;}//填充服務端地址信息}void tcpSend::sendData(std::string&data) {int send_len = send(s_server, data.c_str(), sizeof(data), 0);if (send_len < 0) {cout << "發送失敗!" << endl;}else {std::cout << "send data:" << data.c_str() << std::endl;}}

?main.cpp

#include "tcpSend.h"int main() {tcpSend tcp;for (int i = 0; i < 100; i++) {std::string s = "test " + std::to_string(i);tcp.sendData(s);Sleep(1000);}return 0;
}

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/37869.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/37869.shtml
英文地址,請注明出處:http://en.pswp.cn/news/37869.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

宋浩線性代數筆記(五)矩陣的對角化

本章的知識點難度和重要程度都是線代中當之無愧的T0級&#xff0c;對于各種雜碎的知識點&#xff0c;多做題復盤才能良好的掌握&#xff0c;良好掌握的關鍵點在于&#xff1a;所謂的性質A與性質B&#xff0c;是誰推導得誰~

MyBatis的SqlSession使用步驟

對MyBatis的SqlSession理解 SqlSession是 MyBatis 框架中的一個接口&#xff0c;用于執行與數據庫相關的操作。它提供了一系列方法&#xff0c;用于查詢、插入、更新和刪除數據等數據庫操作。 SqlSession接口是通過SqlSessionFactory創建的&#xff0c;每個SqlSession實例都代…

Ubuntu22.04復現SHADEWACHER(手動安你就慢了)

因為我是打算跑TC數據集&#xff0c;所以跳過audit安裝。 我的Ubuntu使用的是清華源。 1. Parser Setup 1.1 g apt install g1.2 neo4j Ubuntu22.04換什么源都會導致無法定位軟件包&#xff0c;添加neo4j的官方源又會導致不信任的源。 22.04以下的版本&#xff0c;直接用命…

MySQL 根據多字段查詢重復數據

MySQL 根據多字段查詢重復數據 在實際的數據庫應用中&#xff0c;我們經常需要根據多個字段來查詢重復的數據。MySQL 提供了一些方法來實現這個功能&#xff0c;讓我們能夠快速準確地找到和處理重復數據。本文將介紹如何使用 MySQL 來根據多字段查詢重復數據&#xff0c;并提供…

SIFT 算法 | 如何在 Python 中使用 SIFT 進行圖像匹配

介紹 人類通過記憶和理解來識別物體、人和圖像。你看到某件事的次數越多,你就越容易記住它。此外,每當一個圖像在你的腦海中彈出時,它就會將該項目或圖像與一堆相關的圖像或事物聯系起來。如果我告訴你我們可以使用一種稱為 SIFT 算法的技術來教機器做同樣的事情呢? 盡管…

C語言——動態內存函數(malloc、calloc、realloc、free)

了解動態內存函數 前言&#xff1a;一、malloc函數二、calloc函數三、realloc函數四、free函數 前言&#xff1a; 在C語言中&#xff0c;動態內存函數是塊重要的知識點。以往&#xff0c;我們開辟空間都是固定得&#xff0c;數組編譯結束后就不能繼續給它開辟空間了&#xff0…

貼吧照片和酷狗音樂簡單爬取

爬取的基本步驟 很簡單&#xff0c;主要是兩大步 向url發起請求 這里注意找準對應資源的url&#xff0c;如果對應資源不讓程序代碼訪問&#xff0c;這里可以偽裝成瀏覽器發起請求。 解析上一步返回的源代碼&#xff0c;從中提取想要的資源 這里解析看具體情況&#xff0c;一…

13 計算機視覺-代碼詳解

13.2 微調 為了防止在訓練集上過擬合&#xff0c;有兩種辦法&#xff0c;第一種是擴大訓練集數量&#xff0c;但是需要大量的成本&#xff1b;第二種就是應用遷移學習&#xff0c;將源數據學習到的知識遷移到目標數據集&#xff0c;即在把在源數據訓練好的參數和模型&#xff…

淺談現代醫院手術室IT供配電系統的設計與研究

安科瑞 華楠 &#xff3b;摘要&#xff3d; 隨著人們的生活水平的不斷提高&#xff0c;醫療條件的不斷改善&#xff0c;人們對健康越來越重視同時對醫療條件的要求也越來越高&#xff0c;對醫院手術室醫療設施提出了新的要求。以往醫院普通手術室狀況已不能滿足人們的要求&…

GPT的第一個創作

嗨&#xff0c;大家好&#xff0c;我是賴興泳&#xff01;今天&#xff0c;我要和大家聊一聊前端開發&#xff0c;就像我用音符創造音樂一樣&#xff0c;前端開發也是創造美麗的用戶界面的過程。 前端開發是構建網站和應用程序用戶界面的關鍵部分。就像音樂家需要精心編排音符…

騰訊云CVM服務器端口在安全組中打開!

騰訊云服務器CVM端口怎么開通&#xff1f;騰訊云服務器端口是通過配置安全組規則來開通的&#xff0c;騰訊云服務器網以開通80端口為例來詳細說下騰訊云輕量應用服務器開啟端口的方法&#xff0c;其他的端口的開通如8080、1433、443、3306、8888等端口也適用于此方法&#xff0…

基于Yolov5與LabelMe訓練自己數據的圖像分割完整流程

基于Yolov5與LabelMe訓練自己數據的實例分割完整流程 1. Yolov5配置2. 創建labelme虛擬環境4. 接下來開始使用labelme繪制分割數據集4.1 json to txt4.2 劃分數據集(可分可不分) 5. 訓練 1. Yolov5配置 參照這邊文章&#xff1a; https://blog.csdn.net/ruotianxia/article/de…

okcc對接ASR平臺,okcc客戶投訴的安全問題

客戶投訴: 客戶為什么要投訴&#xff1f;實際上分為兩種情況&#xff0c;一是客戶被冒犯到不能容忍導致的投訴&#xff0c;二是惡意投訴。降低客戶被冒犯投訴的概率&#xff0c;無非就是選擇客戶、規范用語、降低頻度&#xff1b;減少惡意投訴&#xff0c;回避是實踐證明最有效…

前端= 結構(HTML)+ 樣式(CSS)+ 行為(JavaScript)

前端開發確實涵蓋了行為&#xff08;JavaScript&#xff09;、樣式&#xff08;CSS&#xff09;和結構&#xff08;HTML&#xff09;這三個主要方面。這三個方面在前端開發中密切協作&#xff0c;共同構建用戶界面和用戶體驗。 結構&#xff08;Structure&#xff09;&#xff…

java # Servlet

一、什么是Servlet&#xff1f; Servlet是javaEE規范之一。規范就是接口。JavaWeb三大組件分別是&#xff1a;Servlet程序、Filter過濾器、Listener監聽器。Servlet是運行在服務器上的一個Java小程序&#xff0c;它可以接收客戶端發送來的請求&#xff0c;并響應數據給客戶端。…

Django筆記之中間件介紹

這一節介紹一下 Django 的中間件。 關于中間件&#xff0c;官方文檔的解釋為&#xff1a;中間件是一個嵌入 Django 系統的 request 和 response 的鉤子框架&#xff0c;是一個能夠全局改變 Django 輸入/輸出的系統。 我們可以這樣理解&#xff0c;一個 request 請求發送到 Dj…

《C語言深度解剖》.pdf

&#x1f407; &#x1f525;博客主頁&#xff1a; 云曦 &#x1f4cb;系列專欄&#xff1a;深入理解C語言 &#x1f4a8;吾生也有涯&#xff0c;而知也無涯 &#x1f49b; 感謝大家&#x1f44d;點贊 &#x1f60b;關注&#x1f4dd;評論 C語言深度解剖.pdf 提取碼:yunx

KCC@深圳開源讀書會即將舉辦,來與行業大咖面對面交流

KCC&#xff0c;全稱 KAIYUANSHE City Community&#xff08;中文&#xff1a;開源社城市社區&#xff09;是由開源社發起&#xff0c;旨在讓開源社區在每個城市落地生根的地域性開源組織。 自2023年2月份發起以來&#xff0c;我們已經在南京、上海、深圳、北京、硅谷、新加坡、…

iTOP-3568開發板使用OpenCV處理圖像-顏色轉換

本小節代碼在配套資料“iTOP-3568 開發板\03_【iTOP-RK3568 開發板】指南教程 \04_OpenCV 開發配套資料\05”目錄下&#xff0c;如下圖所示&#xff1a; cv2.cvtColor()函數功能&#xff1a; 將一幅圖像從一個色彩空間轉換到另一個色彩空間。 函數原型&#xff1a; cv2.cvt…

日常BUG—— maven編譯報錯

&#x1f61c;作 者&#xff1a;是江迪呀??本文關鍵詞&#xff1a;日常BUG、BUG、問題分析??每日 一言 &#xff1a;存在錯誤說明你在進步&#xff01; 一、問題描述 一個maven項目在由于在代碼中書寫了如下代碼&#xff1a; public static ConcurrentMap<…