代码拉取完成,页面将自动刷新
#include "UDP_Client.hpp"
using namespace LogModule;
int main(int argc,char* argv[])
{
ENABLE_CONSOLE_LOG;
if(argc!=3)
{
LOG(LogLevel::ERROR)<<"Usage "<<argv[0]<<": 127.0.0.1 8080";
Die(1);
}
//0.获取服务器的套接字信息
InetAddr inetaddr;
std::string server_ip = argv[1];
uint16_t server_port = std::stoi(argv[2]);
//1.创建套接字
int sock_fd = socket(AF_INET,SOCK_DGRAM,0);
if(sock_fd<0)
{
LOG(LogLevel::FATAL)<<"socket fail";
Die(2);
}
//2.填写server信息
//因为后续要在sendto中直接给server通信
sockaddr_in server_socket;
bzero(&server_socket, sizeof(sockaddr_in));
server_socket.sin_family = AF_INET;
server_socket.sin_port = ::htons(server_port);
server_socket.sin_addr.s_addr = ::inet_addr(server_ip.c_str());
// //3.进行bind,并且设置进内核
// int ret = bind(sock_fd,CONV(&server_socket),sizeof(server_socket));
while(true)
{
std::cout<<"Please Enter"<<std::endl;
std::string Message;
std::getline(std::cin,Message);
int n = ::sendto(sock_fd,Message.c_str(),Message.length(),0,CONV(&server_socket),sizeof(server_socket));
if(n<0)
{
LOG(LogLevel::ERROR)<<"sendto fail";
exit(3);
}
//用于接受服务器端的echo,作为输出型参数。
//LOG(LogLevel::DEBUG)<<"sendto success";
struct sockaddr_in temp;
socklen_t len = sizeof(temp);
char buffer[SIZE];
int ret = ::recvfrom(sock_fd,buffer,SIZE-1,0,CONV(&temp),&len);
if(ret>0)
{
buffer[ret] = 0;
LOG(LogLevel::INFO)<<"Server echos@ "<<buffer;
}
else
{
LOG(LogLevel::ERROR)<<"client recv fail";
}
}
return 0;
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。