//myserver.cpp
#include <iostream>
#include <cstdlib>
#include <unistd.h>
#include <cstring>
#include <arpa/inet.h>
#include <string>
int main()
{
//监听套接字创建以及判断是否成功
int lfd = socket(AF_INET,SOCK_STREAM,0);
if(lfd==-1)
{
perror("socket");
exit(0);
}
//bind()绑定lfd和本地ip+port
struct sockaddr_in addr;
addr.sin_family = AF_INET6;
addr.sin_addr.s_addr = INADDR_ANY;
addr.sin_port = htons(8080);
int ret1 = bind(lfd,(sockaddr*)@addr,sizeof(addr));
if(ret1==-1){
perror(bind);
exit(0);
}
//设置监听
int ret2 = listen(lfd,128);
if(ret2==-1){
perror("listen");
exit(0);
}
//accept()阻塞并等待client连接
struct sockaddr_in cliaddr;
socklen_t clilen = sizeof(cliaddr);
int cfd = accept(lfd,(struct sockaddr *)&cliaddr,&clilen);
if(cfd== -1){
perror("accept");
exit(0);
}
//打印客户端的地址信息
char ip[24]={0};
std::cout << "客户端的ip地址:" << inet_ntop(AF_INET6,&cliaddr.sin_addr.s_addr,ip,sizeof(ip))
<< "端口:" << ntohs(cliaddr.sin_port) << std::endl;
//和client通信
while(true){
char buffer[1024]={0};
int len=read(cfd,buffer,sizeof(buffer));
if(len>0){
std::cout << "客户端发来信息:" << buffer << std::endl;
write(cfd,buffer,len);
}
else if (len==0){
std::cout << "客户端已断开连接!" << std::endl;
break;
}
else{
perror("read");
break;
}
}
//关闭所有套接字
close(lfd);
close(cfd);
return 0;
}