Ai
1 Star 0 Fork 0

周不才/cpp_linux study

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
TcpClientMain.cc 2.72 KB
一键复制 编辑 原始数据 按行查看 历史
周不才 提交于 2025-03-13 14:38 +08:00 . RemoteCommandExecution
//Tcp回显服务器项目——客户端(不实现类,直接使用相关套接字接口)
#include <iostream>
#include <cstring>
#include <unistd.h> //提供文件读写、进程控制等函数
#include <sys/types.h> //定义数据类型(如size_t, ssize_t),通常被其他网络头文件隐式包含
#include <sys/socket.h> //提供套接字操作的核心函数(如socket(), bind(), listen(), accept(), connect())和数据结构(如sockaddr)。
#include <netinet/in.h> //定义IPv4和IPv6地址结构体(如sockaddr_in, sockaddr_in6)和网络字节序转换宏(如htonl(), htons())
#include <arpa/inet.h> //提供IP地址转换函数(如inet_pton(), inet_ntop())
//启动客户端指令: ./tcpclient server-ip server-port
int main(int argc, char *argv[])
{
if(argc!=3)
{
std::cerr<<"Usage: "<<argv[0]<<" server-ip server-port"<<std::endl;//客户端启动指令错误
exit(0);
}
std::string serverip=argv[1];//从main函数参数中获取服务端ip地址
uint16_t serverport=std::stoi(argv[2]);//从main函数参数中获取服务端端口号
//1.创建套接字
int sockfd=::socket(AF_INET,SOCK_STREAM,0);
if(sockfd<0)//创建失败
{
std::cerr<<"create socket error"<<std::endl;
exit(1);
}
//补充:客户端不需要显式绑定套接字,客户端拥有自己的ip地址和端口号
//当客户端与服务端连接成功时,操作系统会自动为客户端的套接字绑定上ip地址和端口号
//2.与服务端建立连接
struct sockaddr_in server;
memset(&server,0,sizeof(server));
server.sin_family=AF_INET;// 指定套接字的通信协议类型为IPv4
server.sin_port=htons(serverport);// 指定通信端口号(网络字节序)
::inet_pton(AF_INET,serverip.c_str(),&server.sin_addr);//将点分十进制形式的ip地址转换为struct in_addr类型
int n=::connect(sockfd,(struct sockaddr*)&server,sizeof(server));//连接服务端
if(n<0)//连接失败
{
std::cerr<<"connect socket error"<<std::endl;
exit(2);
}
//长服务
while(true)//连接成功
{
std::string message;
std::cout<<"Enter #";
std::getline(std::cin,message);//客户端输入消息
write(sockfd,message.c_str(),message.size());//客户端给服务端发送消息
char echo_buffer[1024];
n=read(sockfd,echo_buffer,sizeof(echo_buffer));//客户端接收服务端的消息,并存放在echo_buffer中
if(n>0)
{
echo_buffer[n]=0;
std::cout<<echo_buffer<<std::endl;//客户端输出从服务端的获取到的消息
}
else
{
break;
}
}
return 0;
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/yan0605/cpp_linux-study.git
git@gitee.com:yan0605/cpp_linux-study.git
yan0605
cpp_linux-study
cpp_linux study
master

搜索帮助