- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
注意:问题已被编辑。
我有几个关于伯克利套接字编程的问题:
是否可以在绑定(bind)后更改套接字地址?如果是这样 - 这样做的 C 命令是什么?
2.根据https://www.cs.cmu.edu/~srini/15-441/F01.full/www/assignments/P2/htmlsim_split/node18.html ,当套接字绑定(bind)到 INADDR_ANY 时,它从所有接口(interface)接收数据包,但是当发送数据包时,(使用发送命令)它通过具有默认 IP 的单个 NIC 发送。
如果我理解正确——如果服务器有两个事件的 NIC,具有不同的 IP,那么带有 INADDR_ANY 参数的套接字可以接收 dst IP=x 的数据包并发送 src IP=y 的数据包,其中 x 不是y。这可能会导致问题,例如在 TCP 连接中,另一个目标中的套接字将接收数据包,但由于目标 IP 不是预期的 IP 而将其丢弃。
这是真的吗?如果是这样,这是否意味着服务器程序没有在有(两个或更多)具有不同 IP 的事件 NIC 的情况下使用 INADDR_ANY?
假设默认 IP 的 NIC 导致瓶颈。我们可以更改套接字选项,以便通过另一个 NIC(而不是以前的 NIC)发送数据包吗?如果 NIC 具有默认 IP 地址,我们可以这样做吗?
我们可以通过一个 NIC 发送数据包,并将 IP 目的地设置到另一个 NIC 吗? (即NIC1只会发送数据包,NIC2只会接收数据包)
最佳答案
Is it possible to change a socket address after created?
套接字在创建时没有要更改的 IP 地址。他们在绑定(bind)时得到一个。
If so- What are the C commands to do so?
执行此操作的Berkeley Sockets API 函数是bind()
和connect()
。
When a socket is bind to INADDR_ANY, it receives packets from all interfaces, but sends through a single NIC with the default IP.
没有。在每种情况下,它都会通过到达目标所需的任何 NIC 发送数据包。
Your cited source毫无区别地进行区分。绑定(bind)到 INADDR_ANY
的套接字从任何接口(interface)接收数据包。就 INADDR_ANY
而言,“any”和“all”之间没有区别。理解为“任何”要容易得多。
If I understand correctly- if a server has two active NICs, with different IPs, then a socket with the INADDR_ANY parameter can receive a packet with dst IP=x and send a packet with src IP=y, where x is not y
没有。它发送与客户端最初连接的源地址相同的数据包。这是定义连接的一部分。
This can cause problems, for example in TCP connections, where the socket in the other destination is will receive the packet, but will drop it due as the dest IP is not the one expected.
没有。数据包中的目的地是客户端的 IP 地址。否则它甚至不会到达那里。这纯属无稽之谈。如果您指的是源 IP,请参见上文。
Is it true?
没有。
And if so- does it means that server programs are NOT using INADDR_ANY where there are (two or more) active NICs with different IPs?
没有。 INADDR_ANY 的意思正是它所说的。 任何 IP 地址:任何 NIC。
Suppose the NIC of the default IP causes bottleneck. Can we change the socket options so that the packets will be send through another NICs (and not the previous NIC)?
不可以,但是您可以更改 IP 路由表。
Can we do so if the NICs have the default IP address?
其中只有一个可以有默认IP地址。这个问题没有意义。
Can we send packets through one NIC, and set the destination to another NIC?
仅当您发送给自己时。否则这个问题就没有意义。
(from your citation) When sending, a socket bound with INADDR_ANY binds to the default IP address, which is that of the lowest-numbered interface
我希望这是指所描述的任何模拟器。如果它的意思是描述 TCP 如何工作,那就错了。
关于c - 套接字编程-更改套接字IP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33005234/
我正在维护一些 Java 代码,我目前正在将它们转换为 C#。 Java 代码是这样做的: sendString(somedata + '\000'); 在 C# 中,我正在尝试做同样的事情: sen
如何确定函数中传递的参数是字符串还是字符(不确定如何正确调用它)文字? 我的函数(不正确): void check(const char* str) { // some code here }
我真的不知道如何准确地提出这个问题,但我希望标题已经说明了这一点。 我正在寻找一种方法(一个框架/库),它提供了执行 String.contains() 函数的能力,该函数告诉我给定的字符串是否与搜索
我正在尝试编写一些读取 Lambda 表达式并输出 beta 缩减版本的东西。 Lambda 的类型如下:\variable -> expression,应用程序的形式为 (表达式) (表达式)。因此
StackOverflow 上的第 1 篇文章,如果我没能把它做好,我深表歉意。我陷入了一个愚蠢的练习,我需要制作一个“刽子手游戏”,我尝试从“.txt”文件中读取单词,然后我得到了我的加密函数,它将
我想在 Groovy 中测试我的 Java 自定义注释,但由于字符问题而未能成功。 Groovyc: Expected 'a' to be an inline constant of type cha
当我尝试在单击按钮期间运行 javascript location.href 时,出现以下错误“字 rune 字中的字符过多”。 最佳答案 这应该使用 OnClientClick相反? 您可能还想停
我想要类似的东西: let a = ["v".utf8[0], 1, 2] 我想到的最接近的是: let a = [0x76, 1, 2] 和 "v".data(using: String.Encod
有没有办法在 MySQL 中指定 Unicode 字 rune 字? 我想用 Ascii 字符替换 Unicode 字符,如下所示: Update MyTbl Set MyFld = Replace(
阅读 PNG 规范后,我有点惊讶。我读过字 rune 字应该用像 0x41 这样的二进制值进行硬编码,而不是在(程序员友好的)'A' 中。问题似乎是在具有不同底层字符集的不同系统上编译期间字 rune
考虑一个具有 UTF-8 执行字符集的 C++11 编译器(并且符合要求 char 类型为有符号 8 位字节的 x86-64 ABI) . 字母 Ä(元音变音)具有 0xC4 的 unicode 代码
为什么即使有 UTF-8 字符串文字,C11 或 C++11 中也没有 UTF-8 字 rune 字?我知道,一般来说,字 rune 字表示单个 ASCII 字符,它与单字节 UTF-8 代码点相同,
我怎样才能用 Jade 做到这一点? how would I do this 我几乎可以做任何事情,除了引入一个 span 中间句子。 最佳答案 h3.blur. how would I do t
这似乎是一个非常简单的问题,但我只是想澄清我的疑问。我正在查看其他开发人员编写的代码。有一些涉及 float 的计算。 示例:Float fNotAvlbl = new Float(-99); 他为什
我想知道第 3 行“if dec:”中的“dec”是什么意思 1 def dec2bin(dec): 2 result='' 3 if dec:
我试图在字符串中查找不包含任何“a”字符的单词。我写了下面的代码,但它不起作用。我怎么能对正则表达式说“不包括”?我不能用“^”符号表示“不是”吗? import re string2 = "asfd
这个问题在这里已经有了答案: Is floating point math broken? (31 个答案) Is floating point arbitrary precision availa
我正在创建一个时尚的文本应用程序,但在某些地方出现错误(“字 rune 字中的字符太多”)。我只写了一个字母,但是当我粘贴它时,它会转换成许多这样的字母:“\uD83C\uDD89”,原始字母是“🆉
我正在尝试检查用户是否在文本框中输入了一个数字值,是否接受了小数位。非常感谢任何帮助。 Private Sub textbox1_AfterUpdate() If IsNumeric(textbox1
我知道一个 Byte 是 8 位,但其他的代表什么?我正在参加一个使用摩托罗拉 68k 架构的汇编类(class),我对目前的词汇感到困惑。 最佳答案 如 operator's manual for
我是一名优秀的程序员,十分优秀!