c++网络编程(一)TCP/UDPwindows/linux下入门级socket通信客户端与服务端交互代码aircraft

c++网络编程(一)TCP/UDP入门级客户端与服务端交互代码

1,在这里为什么要讨论Linux上的文件操作呢?因为Linux上,socket操作与文件操作没有区别,在Linux上,socket也被认为是文件的一种。注:Linux上的C语言编译器–GCC,具体使用就不在这里讲了。

3,Linux上的文件或套接字操作:打开文件:

intopen(constchar*path,intflag);–>(Linux上对应socket(…)函数)

关闭文件或套接字:

intclose(intfd);–>(Windows上对应closesocket(SOCKETS)函数)

将数据写入文件或传递数据:

ssize_twrite(intfd,constvoid*buf,size_tnbytes);

读取文件中数据或接收数据:

ssize_tread(intfd,void*buf,size_tnbytes);

1,Windows套接字大部分是参考BSD系列UNIX套接字设计的,所以很多地方都跟Linux套接字类似。因此,只需要更改Linux环境下编好的一部分网络程序内容,就能再Windows平台下运行。

2,上面讲了Linux上,文件操作和套接字操作一致。但Windows上的I/O函数和套接字I/O函数是不同的。Winsock数据传输函数:

intsend(SOCKETs,constchar*buf,intlen,intflags);

Winsock数据接收函数:

intrecv(SOCKETs,constchar*buf,intlen,intflags);

Winsock库初始化:

intmain(intargc,char*argv[]){WSADATAwsaData;...if(WSAStartup(MAKEWORD(1,2),&wsaData)!=0)ErrorHandling("WSAStartup()error!");...return0;}在退出时需要释放Winsock库:

intWSACleanup(void);//返回0成功,失败返回SOCKET_ERROR

代码:

windows下:

TCP:

一.服务端代码

二.客户端代码

#define_WINSOCK_DEPRECATED_NO_WARNINGS#include#include#pragmacomment(lib,"ws2_32.lib")voidmain(){//加载套接字WSADATAwsaData;charbuff[1024];memset(buff,0,sizeof(buff));if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0){printf("FailedtoloadWinsock");return;}SOCKADDR_INaddrSrv;addrSrv.sin_family=AF_INET;addrSrv.sin_port=htons(5099);addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");//创建套接字SOCKETsockClient=socket(AF_INET,SOCK_STREAM,0);if(SOCKET_ERROR==sockClient){printf("Socket()error:%d",WSAGetLastError());return;}//向服务器发出连接请求if(connect(sockClient,(structsockaddr*)&addrSrv,sizeof(addrSrv))==INVALID_SOCKET){printf("Connectfailed:%d",WSAGetLastError());return;}else{//接收数据recv(sockClient,buff,sizeof(buff),0);printf("%s\n",buff);}//发送数据char*buffSend="hello,thisisaClient....";send(sockClient,buffSend,strlen(buffSend)+1,0);printf("%d",strlen(buffSend)+1);//关闭套接字closesocket(sockClient);WSACleanup();system("pause");}

怕某些小白不懂我详细说说运行,运行时先开服务端,在开客户端运行,也就是开两个cPP文件分别运行,两个cpp各是一个小项目代码不要放在一起

这里的127.0.0.1是代表本地的地址,你们想实现两机交互就用对方的地址。

代码很简单,想要直接拿去,接下来直接看运行结果:

UDP:

windows下UDP服务端代码

windows下UDP客户端端代码

注:以下代码需在LINUX下运行gcc什么的都可以

LINUX下:

一.TCP

linux下TCP服务端代码:

linux下TCP客户端代码:

二.UDP

linux下UDP服务端代码

linux下UDP客户端代码

#include#include#include#include#includeintmain(intargc,char*argv[]){intclient_sockfd;intlen;structsockaddr_inremote_addr;//服务器端网络地址结构体intsin_size;charbuf[BUFSIZ];//数据传送的缓冲区memset(&remote_addr,0,sizeof(remote_addr));//数据初始化--清零remote_addr.sin_family=AF_INET;//设置为IP通信remote_addr.sin_addr.s_addr=inet_addr("127.0.0.1");//服务器IP地址remote_addr.sin_port=htons(8000);//服务器端口号/*创建客户端套接字--IPv4协议,面向无连接通信,UDP协议*/if((client_sockfd=socket(PF_INET,SOCK_DGRAM,0))<0){perror("socketerror");return1;}strcpy(buf,"Thisisatestmessage");//发送的内容printf("sending:'%s'/n",buf);sin_size=sizeof(structsockaddr_in);/*向服务器发送数据包*/if((len=sendto(client_sockfd,buf,strlen(buf),0,(structsockaddr*)&remote_addr,sizeof(structsockaddr)))<0){perror("recvfrom");return1;}/*关闭套接字*/close(client_sockfd);return0;}

THE END
1.c语言中如何实现网络通信c网络通信//网络通信的地址结构(internet) struct sockaddr_in { sa_family_t sin_family; /* address family: AF_INET */ in_port_t sin_port; /* port in network byte order */ struct in_addr sin_addr; /* internet address */ }; /* Internet address. */ https://blog.csdn.net/yinbucheng/article/details/51735065
2.C++网络编程初学者的开源项目码云周刊第41期互联网的兴起,让网络程序有了长足的发展,让我们可以通过网络编程在程序中实现计算机的通信。举个例子,当你使用浏览器访问码云时,你的计算机就和码云的某台服务器通过互联网连接起来了,然后,码云的服务器把网页内容作为数据通过互联网传输到你的电脑上。 当然,对于 C++ 网络编程的初学者,小编推荐下面6个还算不错的开https://cloud.tencent.com/developer/article/1078264
3.C++网络编程Socket基础:网络通讯程序入门级教程编程语言:C++ 运行环境:Ubuntu 项目技术:socket 目录 一、基本概念 二、第一个网络通讯程序 2.1 网络通讯的流程示意图 2.2 程序模块 三、运行测试 3.1 准备工作 3.2 编译 3.3 运行 四、程序分析 4.1 客户端程序 https://blog.51cto.com/sarpro/10317992
4.C++Actor库orca简介(四):网络消息通信wlgq2C++ Actor库orca简介(四):网络消息通信 项目地址:https://github.com/wlgq2/orca orca网络通信机制 orca的网络部分基于libuv,并对libuv做了一层C++封装:https://github.com/wlgq2/libu orca的项目中编译了libuv1.22.0的vs2017及gcc5.50版本,如需使用其他版本,则需自己编译相应版本。https://segmentfault.com/a/1190000016976794/
5.C/C++知识点之c语言中如何实现网络通信(流程实例)本文主要向大家介绍了C/C++知识点之c语言中如何实现网络通信(流程实例),通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。 主要函数: --- TCP实现服务器与客户端的通信流程 //服务器端---服务器是一个被动的角色 1.socket//买一个手机 2.bind//SIM卡绑定一个手机号(ip+port) 3.https://www.douban.com/group/topic/130291496/
6.CORBA/TAO使用手记1C/S架构网络通信开发CORBA/TAO使用手记1 -- C/S架构网络通信开发 在C/S结构的C++网络程序中,直接采用Socket API进行开发效率是很低的,所以大家发明了各种各样的网络框架,如Boost.Aiso和ACE,简化了网络通信开发的难度。 但是这种基于数据包收发的模式还是不太方便,于是又出现了RPC、DCOM、CORBA等远程接口调用的标准。客户端只需要像http://www.cppblog.com/cppx/archive/2011/02/16/140184.html
7.c++网络编程(一)TCP/UDPwindows/linux下入门级socket通信客户(remote_addr)); //数据初始化--清零 remote_addr.sin_family=AF_INET; //设置为IP通信 remote_addr.sin_addr.s_addr=inet_addr("127.0.0.1");//服务器IP地址 remote_addr.sin_port=htons(8000); //服务器端口号 /*创建客户端套接字--IPv4协议,面向无连接通信,UDP协议*/ if((client_sockfd=sockethttps://www.imooc.com/article/75561
8.C++,网络库推荐复杂分布式系统、中间件、高性能网络服务器及客户端应用。 实现高并发、低延迟的网络通信。 官网:https://www.dre.vanderbilt.edu/~schmidt/ACE.html Asio 特点: C++模板库,专注于高效、类型安全的异步I/O编程。 支持TCP、UDP、SSL/TLS、串行通信等多种网络协议。 https://www.jianshu.com/p/fc6dc047ff2b
9.VisualC++网络编程案例实战中文pdf版[11MB]电子书下载《Visual C++网络编程案例实战》共15章,分为3篇。第1篇介绍了Visual C++网络开发基础知识,包括Visual C++网络编程概述、Socket套接字编程和多线程与异步套接字编程。第2篇介绍了7大类网络开发典型应用案例的实现,包括FTP客户端实现之一、 FTP客户端实现之二、网页浏览器、网络通信器、邮件接收和发送客户端之一、邮件https://www.jb51.net/books/464022.html
10.965外企内推(统招本科三年以上,不卡年龄,月薪大部分在15~35k左右C++ 【任职要求】 1.精通C++语言,熟悉Linux操作系统及Linux下的C++程序开发 2.熟悉TCP、UDP、HTTP等常用通信协议,熟悉异步网络编程,熟悉多线程编程。 3.思维逻辑严密,代码风格良好,有技术钻研的热情 4.良好的英文读写能力 5.良好的沟通能力和团队协作精神 https://eleduck.com/posts/yGf0pX
11.Go语言木马加密通信分析与检测据网络安全公司 Intezer 报告显示,恶意软件的开发者已经从 C 和 C++ 逐渐转向 Go 语言,自 2017 年以来,基于 Go 语言的恶意软件数量呈现爆发式增长,增幅超过了 2000%。预计Go的使用率在未来几年将持续上升,并与C、C++和Python一起,成为恶意软件编码的首选编程语言之一。 https://gat.zj.gov.cn/art/2021/10/26/art_1229442537_59086782.html
12.CxxConet:基于协程的C++网络开发框架基于协程的C++网络开发框架. 目录 特点 协程模型 通信流程 示例 性能 依赖 Support CxxConet 基于协程的C++网络开发框架. 目录 特点 协程模型 通信流程 示例 性能 依赖 Support 特点 跨平台:同时支持Linux32/64、OSX64两个平台,支持C++11及以上; 易开发:同步的方式编写代码,支持类Mina的filter过滤链、简单而不失强http://git.oschina.net/cxxjava/CxxConet