问答文章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
易企秀如何分享链接给微信好友?-易企秀分享链接给微信好友的方法 华为荣耀3c系统辅助功能服务老是自动关闭,求解决方案。 我用一键清理忽... 华为荣耀3c手机双击唤醒屏幕不好用了怎么办? 荣耀手机刷机包从哪下 木地板为啥走过会响 瓷砖块要斜成几度角人踩上去不会烂 刚出生的婴儿肚子胀怎么办 新生儿涨肚子按摩图 刚生小宝宝胀气怎么办 白果怎么炒好吃 白果可以制作哪些美食 注册营业执照对方还要我提供监事人的身份证,要是监事人有什么问题会不会影响我这边导致上头批不下来? 通信考研学硕和专硕的代码分别是什么? 注册公司的监事人要承担什么 郑州大学电子信息工程学院通信工程专业代码是多少? 工商局注册公司监事人有什么责任? 通信技术专业代码谁知道? 营业执照监事什么意思 办营业执照监督人是什么意思 注册公司需要企业监督人是干嘛的? 西南大学是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不锈钢无缝钢管的区别 各朝各代出版过哪些版本的《论语》啊? 形容品质的成语有哪些?