QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 946|回复: 11

无聊写代码玩~

[复制链接]
发表于 2003-8-15 21:36:20 | 显示全部楼层 |阅读模式
以下是我很无聊时乱写的Socket C 程序代码
                   如果你觉得你有空的话,帮我找一下错误啊
                   -------------------Client.c-------------------
      ' Create Socket -> Connect -> Read Msg
                                      ----------Start----------- '是一个客户端
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>

int main(int argc,char *argv[])
{
   int socketfd,rent;
   struct socketaddr_in Severaddr;
   char buffer[1024];

   socketfd=socket(AF_INET,SOCK_STREAM,0);'建立Socket

  bzero(&serveraddr,sizeof(serveraddr)); '清空结构变量

   severaddr.sin_family=AF_INET;
   severaddr.sin_port=htons(22);'端口号设为22
   severaddr.sin_addr.s_addr=htonl(argv[1]);'把第一个命令行参数作为服务器地址传递
  
  rent=connect(socketfd,(struct sockaddr *)(&serveraddr),sizeof(struct socketaddr);
   
   rent=read(socketfd,buffer,sizeof(buffer));
   buffer[rent]='';
   printf("%s\n",buffer);
   close(socketfd);
   exit(1);
}

                                 ----------------End--------------------
 楼主| 发表于 2003-8-15 23:32:58 | 显示全部楼层
RedHat 9.0 Gcc3.0 下编译通过
                             ----------------Start--------------------
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>

int main(int argc,char *argv[])
{
int socketfd,rent;
struct sockaddr_in severaddr;
char buffer[1024];

socketfd=socket(AF_INET,SOCK_STREAM,0);

bzero(&severaddr,sizeof(severaddr));

severaddr.sin_family=AF_INET;
severaddr.sin_port=htons(22);
severaddr.sin_addr.s_addr=inet_addr(argv[1]);

rent=connect(socketfd,(struct sockaddr *)&severaddr,sizeof(severaddr));

rent=read(socketfd,buffer,sizeof(buffer));
buffer[rent]='\0';
printf("%s\n",buffer);
close(socketfd);
exit(1);
}

                             -----------------End--------------------
回复

使用道具 举报

 楼主| 发表于 2003-8-15 23:35:49 | 显示全部楼层
倒数第四行很有 意思
   buffer[ren]='\0';
编译了 很 多 遍,就 是这个地方没有的 话就出错!
这里是检查了数组的边界,确保不被溢出!
回复

使用道具 举报

发表于 2003-8-16 00:26:22 | 显示全部楼层
字符串的结尾必须是'\0'啊。当然没有就提示出错了。
回复

使用道具 举报

 楼主| 发表于 2003-8-17 00:32:39 | 显示全部楼层
Thank you for your response!
回复

使用道具 举报

发表于 2003-8-17 14:29:56 | 显示全部楼层
那个……代码还没看,我怎么觉得注释似乎应该用//或者/**/的……兄台那个不是BASIC的吗……
回复

使用道具 举报

 楼主| 发表于 2003-8-17 14:39:55 | 显示全部楼层
/**/
是应该用这个的
我一时转变不过来,哈!
多谢提醒
回复

使用道具 举报

发表于 2003-8-17 15:11:08 | 显示全部楼层
呵呵~不客气不客气~我还没看代码呢
回复

使用道具 举报

 楼主| 发表于 2003-8-17 16:03:12 | 显示全部楼层
多谢指教了!
Give you Fine!
回复

使用道具 举报

发表于 2003-8-18 12:25:59 | 显示全部楼层
嘿嘿,前两天写程序刚巧也写了这些,还挺有用的
回复

使用道具 举报

发表于 2003-8-18 13:12:57 | 显示全部楼层
简单看了下,发现好象都没有错误检测啊,举例说明:
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) /*错误检测  */
          {   
          perror("socket");
                exit(1);
          }
包括recv() send() bind() connect()都应该有这样的错误检测吧。 :)
回复

使用道具 举报

 楼主| 发表于 2003-8-18 19:36:14 | 显示全部楼层
哈,对,是应该有错误检测的
我是写着玩的,所以都把很多不是主要部分的东西省了!
多谢提醒!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-15 06:11 , Processed in 0.090305 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表