原始套接字学习笔记(2)


  在原始套接字学习的过程中,也遇到了一系列的问题,其中不乏自己粗心大意,也有各种没有注意的错误,这里着重写出,并保持持续的更新。

1.fgets()函数问题

  在使用套接字搭建聊天程序的时候,我在这里使用了一个fgets()函数来保存键盘的输入,具体代码如下:

char Buffer[100];
while(fgets(sendbuf,sizeof(sendbuf),stdin)!=0)
{
sendto(sock,
&Buffer,sizeof(Buffer),0,(struct sockaddr *)addr,sizeof(addr));
bzero(Buffer,
sizeof(Buffer));
}

  这里需要注意的问题是,由于fgets()函数是以回车键的输入来判定结束的,与此同时,回车键‘\n’也会作为最后一个字符输入到Buffer中,所以这里在处理一些数据的时候需要注意。

2.socket()建立问题

  在socket()构建的过程中,往往跟随一个判定建立成功与否的perror()语句,这里建议的写法是:

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

  不推荐的写法是:

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

  这种写法很有可能会导致你的socket建立失败,而且程序还不会报错,所以小心一点这里尽量多写一句吧,养成良好的代码习惯。

3.strlen()函数和sizeof()函数

  strlen():strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值(长度不包含“\0”)。

  sizeof():sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数。

  这两个函数在使用过程中要注意,strlen()主要是计数功能,遇到‘\0’后就停止计数返回数字,而sizeof()则返回该对象所占的内存字节数。

  下面给出一个小测试程序供参考:

#include<stdio.h>
#include
<string.h>
int main()
{
char s[22]="i love you!\0";
printf(
"%s\n",s);
printf(
"%d\n",strlen(s));
return 0;
}

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号