linux socket错误。。段错误

oxbat 2007-11-12 01:43:19
以下是clinet端的源代码
#include "unp.h"
main( int argc, char **argv )
{
int sockfd, n;
char recvline[MAXLINE+1];
struct sockaddr_in servaddr;
/*struct sockaddr_in{
* short int sin_family;
* unsigned short int sin_port;
* struct in_addr sin_addr;
* unsigned char sin_zero[8];
*/
struct hostent *he;

if ( argc != 2 )
{
fprintf(stderr,"usage: a.out <IPaddress>");
}
if((he=gethostbyname(argv[1])) == NULL)
{
herror("gethostbyname");
exit(1);
}


if (( sockfd = socket(AF_INET,SOCK_STREAM,0)) < 0 )
{
perror("socket error" );
}

memset( &servaddr, 0, sizeof(servaddr));
//bzero( &servaddr, sizeof(servaddr))
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(9120);

if ( connect( sockfd, (SA *)&servaddr, sizeof( servaddr)) < 0 )
{
perror("connect error" );
}

while(( n= read(sockfd, recvline, MAXLINE)) > 0 )
{
recvline[n] = 0; //null terminate
if (fputs(recvline, stdout) == EOF )
{
perror("fputs error");
}
}
if (n<0)
{
perror("read error");
}

exit(0);
}

其实也就是unp里面的第一个程序。。
可是我在编译的时候老是出现 。。段错误 还清帮忙解释下
bat@bat-desktop:~/legend/socket/unp$ daytimetcpcli
usage: a.out <IPaddress>段错误
bat@bat-desktop:~/legend/socket/unp$ daytimetcpcli 127.0.0.1
connect error: Connection refused
read error: Transport endpoint is not connected
......

...全文
362 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
taoyi921 2007-11-12
  • 打赏
  • 举报
回复
我看了一下,程序应该是能编译通过的;
你是在运行的时候出现问题的吧.
1. 直接输入daytimetcpcli会产生断错误,因为你没有加IP,而在程序中也没有做异常处理,
if ( argc != 2 )
{
fprintf(stderr, "usage: a.out <IPaddress> ");
exit(0);//在这退出就不会断错误了.
}
2. 运行daytimetcpcli 127.0.0.1会提示"connect error",你在程序根本没有对ip进行赋值,在
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(9120);
下面加一句:
servaddr.sin_addr.s_addr = inet_addr(argv[1]);
应该就可以了
taoyi921 2007-11-12
  • 打赏
  • 举报
回复
编译的时候就出问题了,你怎么能执行这个程序??
oxbat 2007-11-12
  • 打赏
  • 举报
回复
高人们 帮忙解释下呀。。。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧