问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何在linux/ubuntu下编写c++网络通信代码

发布网友 发布时间:2022-05-01 18:39

我来回答

1个回答

热心网友 时间:2022-06-21 09:01

方法/步骤

1
1.服务器端的代码:
void
SocketServer::CreateConnect(){ std::cout<<"start Create
Socket!"<<std::endl; m_nSocket = -1; struct sockaddr_in
server_addr; struct sockaddr_in client_addr; int
portnumber=4321; if((m_nSocket=socket(AF_INET,SOCK_STREAM,0))==-1)
{ std::cout<<"socket Create
Failed!"<<strerror(errno)<<std::endl; return; }
std::cout<<"Create Socket Finish!"<<std::endl; /*
服务器端填充 sockaddr结构 */ bzero(&server_addr,sizeof(struct
sockaddr_in)); server_addr.sin_family=AF_INET;
server_addr.sin_addr.s_addr=inet_addr("127.0.0.1");
server_addr.sin_port=htons(portnumber); /* *sockfd描述符 */
if(bind(m_nSocket,(struct sockaddr *)(&server_addr),sizeof(struct
sockaddr))==-1) { std::cout<<"Server Bind
Failed!"<<strerror(errno)<<std::endl; return; }
std::cout<<"bind Socket Finish!"<<std::endl; /*
监听sockfd描述符 */ if(listen(m_nSocket,5)==-1) {
std::cout<<"Listen
Failed!"<<strerror(errno)<<std::endl; return; }
std::cout<<"listen Socket Finish!"<<std::endl;
while(1) { /* 服务器阻塞,直到客户程序建立连接 */
std::cout<<"listen start..."<<std::endl; int
nNewFd=-1; size_t nSize = sizeof(struct sockaddr_in);
if((nNewFd=accept(m_nSocket,(struct sockaddr
*)(&client_addr),&(nSize))) == -1) {
std::cout<<"accept
Failed!"<<strerror(errno)<<std::endl; return;
} std::cout<<"server Get Connect
from:"<<inet_ntoa(client_addr.sin_addr)<<std::endl;
while(1) { char buf[256] = "0"; size_t
len = recv( nNewFd, buf, 256, 0) ; if ( len > 0)
std::cout<<"接受的消息为:"<<buf<<std::endl;
else { if ( len < 0)
std::cout<<"错误为:"<<strerror( errno)<<std::endl;
else
std::cout<<"客户端断开:"<<std::endl; break;
} } /* 这个通讯已经结束 */ //close(nNewFd);
/* 循环下一个 */ }}
2
2.客户端代码:
//
创建链接void SocketClient::CreateConnect(){ char buffer[1024]; struct
sockaddr_in server_addr; std::cout<<"socket create
start!"<<std::endl; /* 客户程序开始建立 sockfd描述符 */
if((m_nSocket=socket(AF_INET,SOCK_STREAM,0))==-1) {
std::cout<<"Client socket Create
Failed!!"<<strerror(errno)<<std::endl; return; }
std::cout<<"socket create finshed!"<<std::endl; /*
客户程序填充服务端的资料 */ int portnumber = 4321;
bzero(&server_addr,sizeof(server_addr));
server_addr.sin_family=AF_INET;
server_addr.sin_port=htons(portnumber);
server_addr.sin_addr.s_addr=inet_addr("127.0.0.1"); /*
客户程序发起连接请求 */ if(connect(m_nSocket,(struct sockaddr
*)(&server_addr),sizeof(struct sockaddr))==-1) {
std::cout<<"Client connect
Fialed!"<<strerror(errno)<<std::endl; return; }
std::cout<<"connect finshed!"<<std::endl; std::string
str="start..."; while(!str.empty()) {
std::cout<<"starting....!"<<std::endl;
std::cin>>str; size_t len = send ( m_nSocket, str.c_str(),
str.length(), 0) ; if ( len < 0) {
std::cout<<"消息发送失败"<<str<<strerror
(errno)<<std::endl; } else {
std::cout<<"消息发送成功"<<str<<std::endl; } }
close(m_nSocket);}
3
3.编译完成后,启动服务器端代码和客户端代码就可以进行通信了。

4
4.
普及一下TCP/IP协议的部分知识,大家都知道TCP是面向链接的协议,即在进行通信前服务器是被动链接,客户端是主动链接,那么客户端与服务器端的连
接需要经过三次握手才能建立链接。在整个通信过程中客户端与服务器端的进行的通信都有确认机制,保证包能顺利的到达对方,但这也不是100%,中间的路由
等中间桥出现问题,也有可能造成数据包的丢失,而任何一方没有收到确认包,都会一直处于等待和重传的过程中...
服务器:
创建socket->bind->listen->recv(send)->close
客户端:
创建socket->connect->recv(send)->close
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
美的燃气热水器12升电脑版显示FR一pH一PL一dH一nE一qU怎么调好_百度知... 热水器ph什么意思 上海工程技术大学公共管理专业是什么学院 公共事业管理在暨南大学中属于哪个学院? 中央财经大学公共事业管理学生就业去向都有哪些 中飞院公共事业管理是什么专业 广西医科大学公共事业管理属于哪个学院 抖音怎么发视频@抖音小助手 发视频@抖音小助手操作一览 轻颜相机怎么取消自动续费 取消自动续费教程 轻颜相机vip怎么取消 注册营业执照对方还要我提供监事人的身份证,要是监事人有什么问题会不会影响我这边导致上头批不下来? 通信考研学硕和专硕的代码分别是什么? 注册公司的监事人要承担什么 郑州大学电子信息工程学院通信工程专业代码是多少? 工商局注册公司监事人有什么责任? 通信技术专业代码谁知道? 营业执照监事什么意思 办营业执照监督人是什么意思 注册公司需要企业监督人是干嘛的? 西南大学是211 985大学吗 四川师范大学是211大学吗 西南农业大学是211吗? 西华师范大学是985工程高校吗? 西南大学是211或985院校 西北大学是211还是985 和西南大学哪个好 四川文理学院是211大学还是985大学 swu是哪个学校? 重庆市有几所大学是重点大学?他们分别是叫什么名字? 四川大学是211大学还是985大学 四川大学是985还是211 注册公司监事人需要承担什么责任 1-862是什么国家的通信代码? 虎牙哪个白金公会口碑比较好的啊? 虎牙哪个线下公会实力强啊? 虎牙最好的公会是哪个? 办理营业执照监事需要提供身份证原件吗 求串行通信的代码 进程间消息队列双向通信代码问题 这是一个51单片机串口通信的代码,请各位大神帮忙注释一下? java实现串口通信代码 苦瓜黄鳝羹的做法 苦瓜黄鳝羹怎么做 何晏集解:&quot;孔曰:&quot;钓者,一竿钓.纲者,为大网以横绝流.&quot;什么意思 光亮无缝钢管SUS316是不锈钢的吗? 求下面这句话的出处 316不锈钢无缝管的特点 膳鱼怎样做好吃 何晏的译文是什么? 316l 不锈钢管与316l不锈钢无缝钢管的区别 各朝各代出版过哪些版本的《论语》啊? 形容品质的成语有哪些?