4. C++網絡編程-TCP客戶端的實現

TCP Client網絡編程基本步驟

  • 創建socket,指定使用TCP協議
  • 使用connect連接服務器
  • 使用recv/send接收/發送數據關閉socket

在這里插入圖片描述

TCP-connect連接請求

!man 2 connect
在這里插入圖片描述

#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
功能:給服務器發送客戶端的連接請求
參數:sockfd:文件描述符,socket函數的返回值addr:要連接的服務器的網絡信息結構體(需要自己設置)addrlen:add的長度
返回值:成功:0失敗:-1

注意:
connect建立連接之后不會產生新的套接字
連接成功后才可以開始傳輸TCP數據
頭文件:#include

代碼實現

#include <stdio.h>
#include <cstring>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <iostream>
#include <arpa/inet.h>
#define PORT 8888
#define MESSAGE_LEN 1024int main(int argc,char* argv[]){int ret=-1;int socket_fd;struct sockaddr_in serveraddr;char sendbuf[MESSAGE_LEN]={0,};char recvbuf[MESSAGE_LEN]={0,};socket_fd=socket(AF_INET,SOCK_STREAM,0);if(socket_fd<0){std::cout<<"Failed to create socket!"<<std::endl;exit(-1);}serveraddr.sin_family=AF_INET;//地址族serveraddr.sin_port=htons(PORT);//端口號serveraddr.sin_addr.s_addr=inet_addr("127.0.0.1");//這里將字符串轉換成整型ret=connect(socket_fd,(struct sockaddr *)&serveraddr,sizeof(sockaddr));if(ret < 0){std::cout<<"Failed to connect server!"<<std::endl;exit(-1);}std::cout<<"connect success!"<<std::endl;while(1){memset(sendbuf,0,MESSAGE_LEN);fgets(sendbuf,sizeof(sendbuf),stdin);//輸入ret = send(socket_fd,sendbuf,strlen(sendbuf),0);//發送if(ret <= 0){std::cout<<"Failed to send data!"<<std::endl;break;}if(strcmp(sendbuf,"quit")==0){break;}ret = recv(socket_fd,recvbuf,MESSAGE_LEN,0);//接收數據recvbuf[ret]='\0';std::cout<<"recv:"<<recvbuf<<std::endl;//輸出}close(socket_fd);return 0;
}

在這里插入圖片描述

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

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

相關文章

邦芒簡歷:簡歷照片的藝術與真實

在美顏濾鏡與P圖技術盛行的今天&#xff0c;許多人似乎對“完美”形象有著不懈的追求。從社交平臺的自拍&#xff0c;到簡歷上的證件照&#xff0c;無一不經過精心的修飾與處理。然而&#xff0c;這種對完美的追求在求職過程中&#xff0c;是否總是起到積極的作用呢&#xff1f…

內網滲透(不出網上線CS)

目錄 CS的概述 實驗&#xff1a;不出網上線CS實驗 一&#xff1a;給PC1種馬 二&#xff1a;使用Beacon SMB去控制PC2。 三&#xff1a;將CS權限傳遞給MSF 四&#xff1a;將msf權限傳遞給CS CS的概述 cs是一款強大的控制windows木馬的工具。是目前滲透中常使用的一個工具…

一些Spring Boot直接的解釋

RequestParam() 就是從問號之后的鍵值對獲取值綁定值,這個方法用的是get方法 /fjg?namefjg http://example.com/find?productId1234GetMapping("/find") public String getProduct(RequestParam("productId") String productId) {return "Product …

fastapi中實現多個路由請求

大家伙&#xff0c;我是雄雄&#xff0c;歡迎關注微信公眾號&#xff1a;雄雄的小課堂。 前言 最近在寫機器人相關的接口&#xff0c;順手學了學python&#xff0c;發現這是個好東西&#xff0c;寫代碼效率比java要高很多&#xff0c;比如寫個詞云呀&#xff0c;寫個回調呀&am…

隨手筆記4

1、https://www.pgyer.com/app/distribution 蒲公英 移動發布二維碼

gRPC和ProtoBuf

gRPC介紹 gRPC是一個高性能、開源且通用的RPC框架&#xff0c;它基于HTTP/2標準協議和Protocol Buffers進行數據序列化&#xff0c;支持多種編程語言。 rpc和http區別 傳輸協議&#xff1a;RPC可以基于TCP或HTTP協議&#xff0c;而HTTP服務則工作在HTTP協議之上。效率和性能…

android 問題記錄:gradle.kts文件引入本地jar包

在build.gradle文件中引入本地的jar文件&#xff0c;可以使用files方法來添加本地的jar文件到項目的依賴中。在build.gradle引入jar包我們都很熟悉了&#xff0c;具體代碼如下 implementation files(libs/test.jar)// 或者 compile files(libs/test.jar) 但是這種寫法目前在kt…

kafka 消費模式基礎架構

kafka 消費模式 &基礎架構 目錄概述需求&#xff1a; 設計思路實現思路分析1.kafka 消費模式基礎架構基礎架構2&#xff1a; 參考資料和推薦閱讀 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,…

mainwindow.ui和mainwindow.h和ui_mainwindow.h這幾個文件之間的聯系是什么

在Qt應用程序開發中&#xff0c;mainwindow.ui, mainwindow.h, 和 ui_mainwindow.h 這三個文件之間有著緊密的聯系&#xff0c;共同構成了使用Qt Designer設計的圖形用戶界面&#xff08;GUI&#xff09;應用程序的基礎。下面是這三個文件各自的作用及它們之間的關聯&#xff1…

HTML5 文件處理及應用

HTML5 文件處理及應用 目錄 核心對象文件信息讀取文件拖放FileReaderSyncFileWriter APIBlob URL與 revokeObjectURL()跨源資源共享 (CORS)HTML5文件File API為瀏覽器提供了與用戶計算機上的文件進行交互的能力,使得Web應用程序能夠在客戶端直接處理文件數據,而無需依賴服務…

Golang:使用jszwec/csvutil讀取csv文件

jszwec/csvutil 高性能、慣用的CSV記錄編碼和解碼到本機Go結構 文檔 https://github.com/jszwec/csvutil 安裝 go get github.com/jszwec/csvutil要讀取的文件 user.csv name,age,CreatedAt jacek,26,2012-04-01T15:00:00Z john,,2001-01-01T00:00:00Z讀取示例 package m…

93.網絡游戲逆向分析與漏洞攻防-游戲技能系統分析-增強技能信息顯示后進行分析

免責聲明&#xff1a;內容僅供學習參考&#xff0c;請合法利用知識&#xff0c;禁止進行違法犯罪活動&#xff01; 如果看不懂、不知道現在做的什么&#xff0c;那就跟著做完看效果&#xff0c;代碼看不懂是正常的&#xff0c;只要會抄就行&#xff0c;抄著抄著就能懂了 內容…

Ant Design Vue中 a-table 嵌套子表格

需求&#xff1a;在父表格中嵌套子表格&#xff0c;當點擊展開某一行時&#xff0c;有展開的關閉當前展開行。使用a-table中的expandedRowKeys 屬性和expand 方法。鏈接&#xff1a;Ant Design Vue 一、屬性說明&#xff1a; expandedRowKeys&#xff1a;這個主要是控制展開某行…

都2024年了!是誰還不會優化 Hive 的小文件啊!!!速看!

文章目錄 小文件產生的原因1.查詢建表或者插入2.裝載數據3.動態分區小文件影響解決方法針對已經存在的小文件進行優化1.小文件歸檔2.getmerge3.concatenate4.重寫針對寫入數據時的優化1.調參優化2.動態分區優化3.使用 Spark 算子控制小文件數量查看 HDFS 上的文件時,無意間點進…

【QT+VS】如何在現有VS項目中添加Qt界面?【全網最詳細】

0. 前置步驟 參考如下鏈接文章中的 前3個步驟(1:下載Qt;2:安裝Qt;3:安裝Qt插件),完成環境的配置和安裝。 深耕AI:如何聯合Qt,VS,C++,來開發一個電腦版軟件(簡單有趣,詳細) 本文的基礎項目鏈接為: c++工程+圖像分割預測+mmdet+實例分割+最新工程+簡潔易懂+新手…

搭建自己的視頻通話服務器Janus(WebRTC)

1. 安裝janus apt install janus 高版本的Ubuntu已經可以直接安裝了&#xff0c;不要編譯那么麻煩了 2. 安裝nginx janus 是后端&#xff0c;需要nginx或者其他等提供前端頁面的服務器&#xff0c;此外因為這里并沒有正式的證書&#xff0c;只能用自簽名的證書用于https。 …

Mac 更改登陸密碼,不是appleid 密碼

在Mac 上更改登錄密碼 在Mac 上&#xff0c;選取蘋果菜單 >“系統設置”&#xff0c;然后點按邊欄中的“用戶與群組” 。 … 點按右側用戶名旁邊的“簡介”按鈕 。 點按“更改”。 在“舊密碼”欄輸入你的當前密碼。 在“新密碼”欄中輸入新密碼&#xff0c;然后在“確認密碼…

「數據結構」隊列

目錄 隊列的基本概念 隊列的實現 頭文件queue.h 實現函數接口 1.初始化和銷毀 2.出隊列和入隊列 3.獲取隊頭元素和隊尾元素 4.隊列長度判空 后記 前言 歡迎大家來到小鷗的博客~ 個人主頁&#xff1a;海盜貓鷗 本篇專題&#xff1a;數據結構 多謝大家的支持啦&#xff…

Java入門基礎學習筆記36——面向對象基礎

面向對象編程快速入門&#xff1a; 計算機是用來處理數據的。 單個變量 數組變量 對象數據 Student類&#xff1a; package cn.ensource.object;public class Student {String name;double chinese_score;double math_score;public void printTotalScore() {System.out.pr…

【哈希】Leetcode 219. 存在重復元素 II【簡單】

存在重復元素 II 給你一個整數數組 nums 和一個整數 k &#xff0c;判斷數組中是否存在兩個 不同的索引 i 和 j &#xff0c;滿足 nums[i] nums[j] 且 abs(i - j) < k 。如果存在&#xff0c;返回 true &#xff1b;否則&#xff0c;返回 false 。 示例 1&#xff1a; 輸…