用线程实现的一个C/S通信,总有问题啊。大虾进来看看~~

believe_me 2006-03-23 03:18:59
我在线程函数pthread_fun(...)调用了一个写文件的函数saveClientInfo(...).
void saveClientInfo(struct sockaddr_in cli_addr,int y,int x,time_t now) //save the info to file
{
FILE * fp;
struct tm * tnow; //for local time
char * ip; //client ip
char * port; //client port
char * nbuf;
ip=inet_ntoa(cli_addr.sin_addr);
sprintf(port,"%d",cli_addr.sin_port);
tnow=localtime(&now); // local time
if((fp=fopen("cinfo.txt","w"))==NULL)
{
printf("file open error!\n");
exit(1);
}
fputs(ip,fp); //save the info
fputc('\t',fp);
fputs(port,fp);
fputc('\t',fp);
fputs(asctime(tnow),fp);
fputc('\t',fp);
sprintf(nbuf,"%d",y); ///exit
printf("y.nbuf = %s\n",nbuf);
fputs(nbuf,fp);
fputc('\t',fp);
sprintf(nbuf,"%d",x);
fputs(nbuf,fp);fputc('\n',fp);
fclose(fp); //close the client socket
}
每次server端运行到///exit 时就会退出,client端一直是正常的。
可能是什么原因啊?大虾帮帮忙,搞了好长时间,要哭了~~
...全文
505 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
alaiyeshi 2006-03-24
  • 打赏
  • 举报
回复
port = (char *) malloc ( sizeof ( cli_addr.sin_port ) + 1 ) ;
believe_me 2006-03-24
  • 打赏
  • 举报
回复
那port内存如何分配啊。。。
继续请教!
tonyMCM 2006-03-24
  • 打赏
  • 举报
回复
port内存没有分配
fierygnu 2006-03-23
  • 打赏
  • 举报
回复
ip不用申请是因为inet_ntoa返回一个静态缓冲区的指针。
believe_me 2006-03-23
  • 打赏
  • 举报
回复
没有,只是申请了一个指针,但是char * ip同样没有申请啊!
fierygnu 2006-03-23
  • 打赏
  • 举报
回复
sprintf(port,"%d",cli_addr.sin_port);
port有空间吗?

23,222

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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