当前位置: 技术问答>linux和unix
socket写的udp收包程序,编译老出错。。。
来源: 互联网 发布时间:2016-10-30
本文导语: #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define BUFFER 256 #define SERV_...
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define BUFFER 256
#define SERV_PORT 2048
int main(){
int sockfd;
struct sockaddr_in addr;
char msg[BUFFER];
sockfd = socket(AF_INET, SOCK_DGRAM, 0); /*创建一个socket */
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = htonl(INADDR_ANY);
addr.sin_port = htons(SERV_PORT);
/* 地址和端口绑定到套接字 */
bind(sockfd, (struct sockaddr *)&addr, sizeof(addr)) ;
while(1)
{
recvfrom(sockfd, msg, BUFFER, 0, (struct sockaddr *)&addr, sizeof(cliaddr));
printf("Response from sender: %sn", msg);
}
close(sockfd);
return(0);
}
error: passing argument 6 of 'recvfrom' makes pointer from integer without a cast
第一次写关于网络的程序,。。。。。
我怎么看也看不出那里出了什么问题啊。。。。。
发包的程序是现成,网上看到socket编程的都是要写一个服务器端和一个客户端,。。
就我这个程序可以抓到数据包吗?说实话对这个程序理解的也不是很透彻。。。。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define BUFFER 256
#define SERV_PORT 2048
int main(){
int sockfd;
struct sockaddr_in addr;
char msg[BUFFER];
sockfd = socket(AF_INET, SOCK_DGRAM, 0); /*创建一个socket */
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = htonl(INADDR_ANY);
addr.sin_port = htons(SERV_PORT);
/* 地址和端口绑定到套接字 */
bind(sockfd, (struct sockaddr *)&addr, sizeof(addr)) ;
while(1)
{
recvfrom(sockfd, msg, BUFFER, 0, (struct sockaddr *)&addr, sizeof(cliaddr));
printf("Response from sender: %sn", msg);
}
close(sockfd);
return(0);
}
error: passing argument 6 of 'recvfrom' makes pointer from integer without a cast
第一次写关于网络的程序,。。。。。
我怎么看也看不出那里出了什么问题啊。。。。。
发包的程序是现成,网上看到socket编程的都是要写一个服务器端和一个客户端,。。
就我这个程序可以抓到数据包吗?说实话对这个程序理解的也不是很透彻。。。。
|
出错是因为最后一个参数应该是个指针,你给了一个常数
socklen_t fromlen;
......
fromlen=sizeof(struct sockaddr);
recvfrom(sockfd, msg, BUFFER, 0, (struct sockaddr *)&addr, &fromlen);
fromlen常置为sizeof(struct sockaddr)。当recvfrom()返回时,fromlen包含实际存入from中的数据字节数。
socklen_t fromlen;
......
fromlen=sizeof(struct sockaddr);
recvfrom(sockfd, msg, BUFFER, 0, (struct sockaddr *)&addr, &fromlen);
fromlen常置为sizeof(struct sockaddr)。当recvfrom()返回时,fromlen包含实际存入from中的数据字节数。