免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1694 | 回复: 7
打印 上一主题 下一主题

简单的socket程序问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-10-01 00:40 |只看该作者 |倒序浏览
  1. #include <stdio.h>;
  2. #include <stdlib.h>;
  3. #include <errno.h>;
  4. #include <sys/types.h>;
  5. #include <netinet/in.h>;
  6. #include <sys/socket.h>;
  7. #include <sys/wait.h>;
  8. #define SERVERPORT 3333 /*服务监听端口号*/
  9. #define BACKLOG 10 /*最大连接数*/

  10. void main()
  11. {
  12.   int socketfd,client_fd;
  13.   int sin_size;
  14.   struct sockaddr_in my_addr;
  15.   struct sockaddr_in remote_addr;

  16.   if((socketfd==socket(AF_INET,SOCK_STREAM,0))==-1)/*创建socket*/
  17.   {   
  18.     perror("socket创建出错");
  19.     exit(0);
  20.   }
  21.   my_addr.sin_family=AF_INET;
  22.   my_addr.sin_port=htonl(SERVERPORT);
  23.   my_addr.sin_addr.s_addr=INADDR_ANY;
  24.   bzero(&(my_addr.sin_zero),8);
  25.   if(bind(socketfd,(struct socketaddr *) &my_addr,sizeof(struct sockaddr))==-1)
  26.   {
  27.     perror("bind 出错");
  28.     exit(1);
  29.   }
  30.   if(listen(socketfd,BACKLOG)==-1)
  31.   {
  32.     perror("listen出错");
  33.     exit(1);
  34.   }
  35.   while(1)
  36.   {
  37.     sin_size = sizeof(struct sockaddr_in);
  38.     if ((client_fd = accept(socketfd,(struct socketaddr *)&remote_addr,&sin_size))==-1)    {
  39.       perror("accept出错");
  40.       continue;
  41.     }
  42.     printf("received a connect from %s\n",inet_ntoa(remote_addr.sin_addr));
  43.     if (!fork())
  44.     {
  45.       if (send(client_fd,"Hello,you are connected!\n",26,0)==-1)
  46.           perror("send出错");
  47.       exit(0);
  48.     }
  49.     close(client_fd);
  50.   }
  51. }
复制代码

输出:
  1. [root@IT-ZHY home]# ./server
  2. bind 出错: Bad file descriptor
复制代码

论坛徽章:
0
2 [报告]
发表于 2005-10-01 00:44 |只看该作者

简单的socket程序问题

if((socketfd==socket(AF_INET,SOCK_STREAM,0))==-1)/*创建socket*/
{  
   perror("socket创建出错";
   exit(0);
}

看到这里就没往下看了
第一行socketfd==socket。。。。。

多了个等于号;

论坛徽章:
0
3 [报告]
发表于 2005-10-01 00:56 |只看该作者

简单的socket程序问题

谢了 晚上真是晕的 打死都没看出来

论坛徽章:
0
4 [报告]
发表于 2005-10-01 01:42 |只看该作者

简单的socket程序问题

pf
一大把不该犯的错误

论坛徽章:
0
5 [报告]
发表于 2005-10-01 02:01 |只看该作者

简单的socket程序问题

#include <stdio.h>;
#include <stdlib.h>;
#include <errno.h>;
#include <sys/types.h>;
#include <netinet/in.h>;
#include <sys/socket.h>;
#include <sys/wait.h>;
#define SERVERPORT 3333 /*服务监听端口号*/
#define BACKLOG 10 /*最大连接数*/

int main(void)
{
int socketfd, client_fd;
int sin_size;
struct sockaddr_in my_addr;
struct sockaddr_in remote_addr;
int ret;
  
/* 已修改*/
socketfd = socket(AF_INET,SOCK_STREAM,0); /*创建socket*/
if (socketfd < 0)
{   
   perror("socket创建出错";
   exit(0);
}

/* t添加初始化 */
memset(&my_addr, 0, sizeof(struct sockaddr_in));
my_addr.sin_family     = AF_INET;
/* port is unsigned short data type */
/*my_addr.sin_port       = htonl(SERVERPORT);*/

my_addr.sin_port       = htons(SERVERPORT);
my_addr.sin_addr.s_addr=INADDR_ANY;
/*bzero(&(my_addr.sin_zero),; */

/*if(bind(socketfd,(struct socketaddr *) &my_addr,sizeof(struct sockaddr))==-1)*/
ret = bind(socketfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr));
if (ret < 0)
{
   perror("bind 出错";
   exit(1);
}

ret = listen(socketfd,BACKLOG);
if (ret < 0)
{
   perror("listen出错";
   exit(1);
}

while(1)
{
  
   sin_size = sizeof(struct sockaddr_in);
   /* 填加初始化    */
   memset(&remote_addr, 0, sin_size);
   
   /* 已修改  */
   //if ((client_fd = accept(socketfd,(struct socketaddr *)&remote_addr,&sin_size))==-1)
   client_fd = accept(socketfd,(struct sockaddr *)&remote_addr, &sin_size);
   if (client_fd < 0)
   {
     perror("accept出错";
     continue;
   }
   
   printf("received a connect from %s\n",inet_ntoa(remote_addr.sin_addr));
   if (!fork())
   {
     if (send(client_fd,"Hello,you are connected!\n",26,0)==-1)
         perror("send出错";
     exit(0);
   }
   close(client_fd);
}
}


/* 错误太多了,注意编程风格,变量应注意初始化 */

论坛徽章:
0
6 [报告]
发表于 2005-10-01 13:59 |只看该作者

简单的socket程序问题

[quote]原帖由 "zh_manyu"]if(bind(socketfd,(struct socketaddr *) &my_addr,sizeof(struct sockaddr))==-1) [/quote 发表:


socketaddr?

论坛徽章:
0
7 [报告]
发表于 2005-10-01 22:41 |只看该作者

简单的socket程序问题

呵呵 谢谢各位批评 以后会注意了

论坛徽章:
0
8 [报告]
发表于 2005-10-01 22:42 |只看该作者

简单的socket程序问题

特别感谢下 wjywhl  为我做出那么仔细的修改和注释
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP