当前位置:  开发笔记 > 运维 > 正文

关于C中原始套接字的少量查询

如何解决《关于C中原始套接字的少量查询》经验,为你挑选了1个好方法。

我想使用C中的原始套接字建立一个聊天室。我有以下问题:

问题1:如果使用原始套接字,是否可以使用select函数处理多个连接?

问题2:套接字中的端口号是真实端口,还是为传输层上的各种应用程序逻辑上实现的?

问题3:我只有一台计算机,因此使用lo(本地循环)作为界面。因此,发起聊天的过程首先发送然后接收呼叫,因此它正在接收自己的数据。如何限制呢?

任何帮助将不胜感激,因为这将帮助我增加对原始套接字的信心。

谢谢 :)



1> rob mayoff..:

如果您希望这是一个真实的,可用的聊天系统,请停止。不要使用原始套接字。巨大的错误。

如果您只是想在简历的“体验”部分下放置“原始套接字”,那么您可以继续阅读。

    您可以使用select函数来检测原始套接字何时有可接收的数据包,以及何时可以接受要传输的数据包。select如果要同时检查多个原始套接字(或其他),则可以将多个文件描述符传递给单个调用。

    端口号是TCP和UDP协议(和某些其他传输层协议)的一部分。接收原始套接字的数据包时,内核不查找端口号。

    raw(7)手册页,指出:

    与原始套接字指定的协议号匹配的所有数据包或错误都将传递到此套接字。

    它还指出:

    可以使用该bind(2)调用将原始套接字绑定到特定的本地地址。如果未绑定,则将接收所有具有指定IP协议的数据包。

    因此,您可能希望至少对“连接”的每一端使用不同的IP地址,并将每一端绑定到其地址。

    “但是!”您说,“我正在使用环回!我只能使用127.0.0.1地址!”朋友,不是。整个127.0.0.0/8地址块被保留用于回送地址。127.0.0.1仅仅是最常用的回送地址。Linux(但可能不是其他系统)对回送块中的每个地址作出响应。在一个窗口中尝试:

    nc -v -l 10150 
    

    然后在另一个窗口中:

    nc -s 127.0.0.1 127.0.0.2 10150
    

    您将看到已经创建了从127.0.0.1到127.0.0.2的TCP连接。我认为您也可以将原始套接字绑定到单独的地址。然后,当您收到一个数据包时,您可以检查它是否来自另一端的IP地址,以决定是处理还是丢弃它。

推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有