centos7上写好运行的服务器代码,用TCP调试工具连不上问题
2022/8/1 5:24:17
本文主要是介绍centos7上写好运行的服务器代码,用TCP调试工具连不上问题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
昨天晚上在centos7上写好了服务端(练习用的)代码后,然后启动之后。用TCP调试工具连接一直断开的。
一:代码如下
#define EPOLL_SIZE 1024
int main()
{
int lfd=socket(AF_INET,SOCK_STREAM,0);
//lfd是要监听的fd
if(lfd<0)
{
return -1;
}
int opt=1;
setsockopt(lfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(int)); //端口复用
struct sockaddr_in serv_addr;
memset(&serv_addr,0x0,sizeof(sockaddr_in));
serv_addr.sin_family=AF_INET;
serv_addr.sin_port=htons(6999);
serv_addr.sin_addr.s_addr=INADDR_ANY;
//将lfd和端口绑定
if(bind(lfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr))<0)
{
perror("bind fail");
return -2;
}
if(listen(lfd,5)<0)
{
perror("listen error");
return -3;
}
//使用epoll得创建一个根epfd,然后将所要监听得lfd加入到树中(也就是挂到以epfd为根得红黑树中)
int epfd=epoll_create(1024);
struct epoll_event ev,events[EPOLL_SIZE]={0};
ev.events=EPOLLIN ;
ev.data.fd=lfd;
epoll_ctl(epfd,EPOLL_CTL_ADD,lfd,&ev);
while(1)
{ //-1表示一直阻塞,nready表示当前监听得fd里面产生事件得个数
int nready=epoll_wait(epfd,events,EPOLL_SIZE,-1);
if(nready==-1)
{
if(errno==EINTR) //EINTR表示来信号
{
continue;
}
break;
}
int i=0;
for(i=0;i<nready;i++)
{
if(events[i].data.fd==lfd) //监听到有新得客户端连接过来
{
struct sockaddr_in clientaddr;
socklen_t client_len=sizeof(clientaddr);
int clientfd=accept(lfd,(struct sockaddr*)&clientaddr,&client_len);
if(clientfd<0)
{
continue;
}
ev.events=EPOLLIN;
ev.data.fd=clientfd;
epoll_ctl(epfd,EPOLL_CTL_ADD,clientfd,&ev); //将新得客户端加入到epoll树
printf("sockfd:%d,clientfd:%d\n",lfd,clientfd);
}
else
{
int clientfd=events[i].data.fd;
char buffer[1024]={0};
int ret=recv(clientfd,buffer,5,0);
printf("recv the data from the clientfd ret=%d\r\n",ret);
if(ret<0)
{
if(errno==EAGAIN ||errno==EWOULDBLOCK)
{
printf("read all data\r\n");
continue;
}
else
{
close(clientfd);
epoll_ctl(epfd,EPOLL_CTL_DEL,clientfd,NULL);
}
}
else if(ret==0) //表示客户端断开连接
{
printf("disconnect %d\r\n",i);
epoll_ctl(epfd, EPOLL_CTL_DEL, clientfd, NULL);
break;
}
else
{
printf("Recv :%s %d Bytes \r\n",buffer,ret);
}
}
}
}
}
二:然后编译 g++ -o mynetwork mynetwork.cpp ;生成mynetwork可执行文件,然后启动
接着用tcp调试工具一直连接不上。我通过netstat -lnpt|grep 6999,看到程序是启动得了,也就是端口打开了。如图:
三:后面我就多试了几次,还是不行。我想起来我得这个centos7装没有多久。防火墙估计还是打开得。通过如下命令查看
systemctl status firewalld.service ,看到是active的。
然后把防火墙直接关掉
systemctl stop firewalld.service
四:关了防火墙之后,通过tcp调试连接上了,也能发送数据了,如下图:
发送数据时最好把“十六进制格式“ 的勾去掉,要不然显示出奇怪的数据。。
这篇关于centos7上写好运行的服务器代码,用TCP调试工具连不上问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15PingCAP 黄东旭参与 CCF 秀湖会议,共探开源教育未来
- 2024-05-13PingCAP 戴涛:构建面向未来的金融核心系统
- 2024-05-09flutter3.x_macos桌面os实战
- 2024-05-09Rust中的并发性:Sync 和 Send Traits
- 2024-05-08使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B
- 2024-05-08完工标准(DoD)与验收条件(AC)究竟有什么不同?
- 2024-05-084万 star 的 NocoDB 在 sealos 上一键起,轻松把数据库编程智能表格
- 2024-05-08Mac 版Stable Diffusion WebUI的安装
- 2024-05-08解锁CodeGeeX智能问答中3项独有的隐藏技能
- 2024-05-08RAG算法优化+新增代码仓库支持,CodeGeeX的@repo功能效果提升