socket 接收数据时出错(段错误)
(2012-04-10 23:26:35)
标签:
数据
杂谈
socket
接收数据时出错(段错误)大家好,又是我来问linux下socket问题了。我那个UPD的程序终于改好了,现在客户端跟服务器端都可以正常编译运行了。但是,问题又来了...
我先运行服务器端,正常,再运行客户端向服务器端发送数据,这时服务器端就自动报错退出了,提示是段错误。请问是不是因为接受数据的内存区不为0造成的?请问应该怎么清空接收数据的内存区?谢谢gdb看看core呀,看哪一句错了代码如下,接收数据时就报错了
客户端pix525 vpn 配置问题
r />
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define MYPORT 4950
int main(int argc, char *argv[])
{
int sockfd;
struct sockaddr_in their_addr;
struct hostent *he;
int numbytes;
if(argc != 3)
{
fprintf(stderr,"usage: talker hostname
message\n");
exit (1);
}
if((he=gethostbyname(argv)) == NULL)
{
herror("get host by name"
);
exit(1);
}
if((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
{
perror("socket");
exit( 1 );
}
their_addr.sin_family = AF_INET;
their_addr.sin_port = htons(MYPORT);
their_addr.sin_addr = *((struct in_addr
*)he->h_addr);
bzero(&(their_addr.sin_zero), 8);
if((numbytes=sendto(sockfd, argv, strlen(argv), 0, (struct sockaddr
*)&their_addr, sizeof(struct sockaddr))) ==
-1)
{
perror("send to" );
exit(1);
}
printf("sent %d bytes to
%s\n",numbytes,inet_ntoa(their_addr.sin_addr));
close(sockfd);
return 0;
}
服务端:
#include
#include
#include
#include
#include
#include
#include
#include
#define MYPORT 4950
#define MAXBUFLEN 100
main()
{
int sockfd;
struct sockaddr_in my_addr;
struct sockaddr_in their_addr;
int addr_len, numbytes;
char buf;
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
{
perror("socket") ;
exit(1) ;
}
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(MYPORT);
my_addr.sin_addr.s_addr = INADDR_ANY;
bzero(&(my_addr.sin_zero), 8);
if (bind(sockfd, (struct sockaddr *)&my_addr,
sizeof(struct sockaddr)) == -1)
{
perror( "bind " ) ;
exit(1) ;
}
addr_len = sizeof(struct sockaddr);
if ((numbytes=recvfrom(sockfd, buf, MAXBUFLEN, 0, (struct sockaddr
*)&their_addr, &addr_len)) ==
-1)
{
perror( "recvfrom " ) ;
exit(1) ;
}
printf("got packet from
%s\n",inet_ntoa(their_addr. sin_addr)) ;
printf("packet is %d bytes
long\n",numbytes);
buf = '\0';
printf("packet contains
\"%s\"\n",buf);
close(sockfd);
}struct sockaddr_in their_addr;
addr_len = sizeof(struct sockaddr);
两者结构不一样sizeof(struct sockaddr))
改成sizeof(my_addr)按5楼的大哥说的改了http://www.newsnike.com,报下面的错误
错误http://www.samrz.com/:‘sizeof’ 不能用于不完全的类型 ‘struct my_addr’你改成
addr_len = sizeof(struct sockaddr_in);吧
照理不会报你那个错误的struct sockaddr 和 struct sockaddr_in 大小是一样的,不需要改
printf("got packet from
%s\n",inet_ntoa(their_addr. sin_addr)) ;
这句话可以打出来吗?lz,找一個例子程序,仔細比對:lol::lol:addr_len = sizeof(struct
sockaddr_in);改成这样可以编译运行,但是客户端发数据过来是,服务器这端还是会报段错误,还是不行。
8楼的兄弟,printf("got packet from
%s\n",inet_ntoa(their_addr. sin_addr))
;这句话不能输出,因为程序没运行到这里就报段错误了。
我都搞晕了,希望各位能指导下是我把这个程序完成,谢谢
分享:
喜欢
0
赠金笔
加载中,请稍候......
评论加载中,请稍候...
发评论
登录名: 密码: 找回密码 注册记住登录状态
昵 称:
评论并转载此博文
发评论
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。