在linux上写关于socket客户端程序时为什么会出现段错误呢,socket 接收数据时出错(段错误)...

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))

;这句话不能输出,因为程序没运行到这里就报段错误了。

我都搞晕了,希望各位能指导下是我把这个程序完成,谢谢

分享:

a4c26d1e5885305701be709a3d33442f.png喜欢

0

a4c26d1e5885305701be709a3d33442f.png赠金笔

加载中,请稍候......

评论加载中,请稍候...

发评论

登录名: 密码: 找回密码 注册记住登录状态

昵   称:

评论并转载此博文

a4c26d1e5885305701be709a3d33442f.png

发评论

以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值