Ai
1 Star 0 Fork 0

zc/C语言程序学习

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
UdpClient.cc 3.01 KB
一键复制 编辑 原始数据 按行查看 历史
zc 提交于 2025-01-22 18:16 +08:00 . “json
#include <iostream>
#include <cstdlib>
#include <unistd.h>
#include <strings.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
using namespace std;
void Usage(string proc)
{
cout << "\n\rUsage: " << proc << " serverip serverport\n"
<< endl;
}
// ./udpclient serverip serverport 对应客户端姓名 服务器IP 服务器端口号
int main(int argc, char *argv[])
{ //提醒用户输入3个相应数据
if (argc != 3)//udpclient serverip serverport共3个数据所以不收到3个数据就是出错
{
Usage(argv[0]);//argv[0]存储udpclient姓名
exit(0);
}
string serverip = argv[1];
uint16_t serverport = stoi(argv[2]);
//定义server结构体用于存储与 IPv4 地址相关的网络信息。
struct sockaddr_in server;
//将server内存区域清零,即将这段内存区域中sizeof(server)个字节都设置为0。
bzero(&server, sizeof(server));
// 配置协议族,在socket编程中只能是AF_INET
server.sin_family = AF_INET; //选择AF_INET 的目的就是使用IPv4 进行通信。
//配置端口号(网络字节序),需要保证我的端口号是网络字节序列,因为该端口号是要给对方发送的
server.sin_port = htons(serverport);
//配置监听的IP地址,inet_addr将一个点分十进制的IP转换成一个长整型数
server.sin_addr.s_addr = inet_addr(serverip.c_str());
// socklen_t表示套接字结构体中成员参数的大小,此处计算了套接字结构体的大小
socklen_t len = sizeof(server);
//创建套接字文件sockfd(网络接口卡)
int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (sockfd < 0)
{
cout << "socker error" << endl;
return 1;
}
// client 要bind吗?要!!!只不过不需要用户显示的bind!一般有OS自由随机选择!
// 系统什么时候给我bind呢?首次发送数据的时候
// 一个端口号只能被一个进程bind,对server是如此,对于client,也是如此!
// 其实client的端口号是多少,其实不重要,只要能保证主机上的唯一性就可以!
string message;
char buffer[1024];
while (true)
{
cout << "Please Enter@ ";
getline(cin, message);//获取一行信息
// 通过网络接口卡sockfd将message中message.size个数据以常规、标准(0模式)发给长为len的server(注意强制转换)
sendto(sockfd, message.c_str(), message.size(), 0, (struct sockaddr *)&server, len);
struct sockaddr_in temp;
socklen_t len = sizeof(temp);
//通过网络接口卡sockfd从大小为len的temp以常规、标准(0模式)读取数据到大小为1023的buffer中
ssize_t s = recvfrom(sockfd, buffer, 1023, 0, (struct sockaddr*)&temp, &len);
if(s > 0)
{
buffer[s] = 0;
cout << buffer << endl;
}
}
close(sockfd);//用完关闭创建的套接字文件(网络接口卡)让其停止运行
return 0;
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C
1
https://gitee.com/zc-creat/c-language-program-learning.git
git@gitee.com:zc-creat/c-language-program-learning.git
zc-creat
c-language-program-learning
C语言程序学习
master

搜索帮助