#pragma
#include<cstdio>
#include<string>
#include<unistd.h>
#include<assert.h>
#include<functional>
#include<sys/types.h>
#include<sys/socket.h>
#include<arpa/inet.h>
class TcpSocket
{
public:
TcpSocket():fd_(-1){}
TcpSocket(int fd):fd_(fd){}
bool Socket()
{
fd_ = socket(AF_INET,SOCK_STREAM,0);
if(fd_<0){
perror("socket");
return false;
}
printf("opened fd = %d\n",fd_);
return true;
}
bool Close(){
printf("close fd = %d",fd_);
close(fd_);
return true;
}
bool Bind(const std::string& ip,uint16_t port){
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr(ip.c_str());
addr.sin_port = htons(port);
int ret = bind(fd_,(struct sockaddr*)&addr,sizeof(addr));
if(ret<0){
perror("bind");
return false;
}
return true;
}
bool Listen(int num){
int ret = listen(fd_,num);
if(ret<0){
perror("listen");
return false;
}
return true;
}
bool Accept(TcpSocket* peer,std::string* ip,uint16_t* port = NULL)
{
struct sockaddr_in peer_addr;
socklen_t len = sizeof(peer_addr);
int new_sock = accept(fd_,(sockaddr*)&peer_addr,&len);//服务端进去客户端出来
if(new_sock < 0){
perror("accept");
return false;
}
printf("accept fd = %d\n",new_sock);
peer->fd_ = new_sock;
if(ip!=NULL){
*ip = inet_ntoa(peer_addr.sin_addr);
}
if(port!=NULL){
*port = ntohs(peer_addr.sin_port);
}
return true;
}
bool Recv(std::string* buf){
buf->clear();
char tmp[1024]={0};
ssize_t read_size = recv(fd_,tmp,sizeof(tmp),0);
if(read_size<0){
perror("recv");
return false;
}
if(read_size==0){
return false;
}
buf->assign(tmp,read_size);
return true;
}
bool Send(const std::string& buf){
ssize_t write_size = send(fd_,buf.data(),buf.size(),0);
if(write_size < 0){
perror("send");
return false;
}
return true;
}
bool Connect(const std::string& ip,uint16_t port)
{
sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr(ip.c_str());
addr.sin_port = htons(port);
int ret = connect(fd_,(struct sockaddr*)&addr,sizeof(addr));
if(ret<0){
perror("connect");
return false;
}
return true;
}
public:
int fd_;
};
Linux网络编程套接字(上)
78 浏览量
2023-08-11
16:44:51
上传
评论
收藏 6KB ZIP 举报
Obto-
- 粉丝: 719
- 资源: 2
最新资源
- onenet_chongwukanhu_v06.apk
- 2022NOC软件创意编程赛项真题C++初中-决赛(有解析)
- 2022NOC软件创意编程赛项真题python初中-决赛(有解析)
- openLayer-本地数据加载 (day5)
- A题-正弦信号发生器.xdf
- 2022NOC软件创意编程赛项真题python小学高年级-决赛(有解析)
- mathml转换latex需要的xsl文件
- 2022NOC软件创意编程赛项真题图形化小学高年级-决赛(有解析)
- gbase驱动下载gbase-connector-java-8.3.81.53驱动下载
- 2022NOC软件创意编程赛项真题图形化小学低年级-决赛(有解析)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈