mis*_*yes 3 c network-programming
我在局域网中有两台机器A和B我在A上有一个UDP客户端,在B上有一台UDP服务器,比如
for(;;){
n = recvfrom(sockfd, mesg, 10000, 0, (struct sockaddr *)&cliaddr, &len);
....}
Run Code Online (Sandbox Code Playgroud)
我注意到当UDP客户端发送第一个数据报时,
我可以通过mesg正确获取数据报数据有效负载,
但结构cliaddr未填充,它是原始值,
例如,如果我使用bzero(&cliaddr, sizeof(cliaddr));,
在gdb,我得到
$1 = {sin_family = 0, sin_port = 0, sin_addr = {s_addr = 0}, sin_zero =
"\000\000\000\000\000\000\000"}
Run Code Online (Sandbox Code Playgroud)
收到第一个数据报的原因是什么,recvfrom()没有填充结构cliaddr?
对于后续数据报,可以获得有效信息.
在调用之前recvfrom,必须正确初始化len参数.
例如
len = sizeof(struct sockaddr_in);
n = recvfrom(..., &len);
Run Code Online (Sandbox Code Playgroud)
该recvfrom函数使用长度来帮助确定sockaddr指针实际指向的结构类型.
| 归档时间: |
|
| 查看次数: |
653 次 |
| 最近记录: |