Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 同一台计算机上的UDB对等_C++_Sockets_P2p_Udb - Fatal编程技术网

C++ 同一台计算机上的UDB对等

C++ 同一台计算机上的UDB对等,c++,sockets,p2p,udb,C++,Sockets,P2p,Udb,我想确保我理解这个概念 我们有example.exe,我们将在同一台计算机上运行它5次或更多次 example.exe将创建一个pear(具有发送和接收套接字) 发送套接字在固定端口上发送,接收套接字在同一端口上接收 我的问题是,当运行example.exe 5次时 将在具有相同固定端口的同一“机器”上创建5个对等点!!!这是怎么回事! 我尝试了代码,它正在机器上工作,这意味着相同的Ip地址 下面是一些代码 接收插座 谢谢你,伯克斯:)我有一个问题,如果我们想使用TCP实现同样的功能,这可能吗?

我想确保我理解这个概念 我们有example.exe,我们将在同一台计算机上运行它5次或更多次

example.exe将创建一个pear(具有发送和接收套接字) 发送套接字在固定端口上发送,接收套接字在同一端口上接收

我的问题是,当运行example.exe 5次时 将在具有相同固定端口的同一“机器”上创建5个对等点!!!这是怎么回事! 我尝试了代码,它正在机器上工作,这意味着相同的Ip地址

下面是一些代码

接收插座
谢谢你,伯克斯:)我有一个问题,如果我们想使用TCP实现同样的功能,这可能吗?对等点具有相同的端口,我们希望所有这些端口都连接起来?如果不使用广播(它认为tcp中不存在广播),一个对等方如何连接到所有这些端口,并且它们具有相同的端口?这样做没有意义,因此\u REUSEADDR with tcp connections通常用于将套接字重新绑定到已死(僵尸)的端口上一个。谢谢你,伯克斯:)我知道so_reuseaddr可以拥有相同的地址,但我不明白它的概念?如何做到这一点?我想象它关闭一个端口,然后把它交给一个对等端口,然后关闭它,再把它打开给另一个,对吗?你真的不能打开“另一个”它。它不是一个“资源”,而是一个标识符,就像一个邮政地址127.0.0.1:5523就像一个街道、房子和公寓的号码。那么so_reuseaddr是如何工作的呢?它是如何使多个对等机具有相同的端口号的?再次非常感谢:)
sockaddr_in RecvAddr;
RecvAddr.sin_family = AF_INET;
RecvAddr.sin_port = htons(PORT);
RecvAddr.sin_addr.s_addr = htonl(INADDR_ANY);

cout << RecvAddr.sin_addr.s_addr << endl;


int broadcastValue = 1;
if (setsockopt(receivingSocket, SOL_SOCKET, SO_REUSEADDR, (char*)&broadcastValue, sizeof(broadcastValue)) == SOCKET_ERROR)
    exit(EXIT_FAILURE);

int iResult = 0;
iResult = bind(receivingSocket, (SOCKADDR *)& RecvAddr, sizeof (RecvAddr));
if (iResult != 0) {
    exit(EXIT_FAILURE);
sockaddr_in destinationAddress;
destinationAddress.sin_family = AF_INET;
destinationAddress.sin_addr.s_addr = INADDR_BROADCAST;
destinationAddress.sin_port = htons((unsigned short)PORT);

if (sendto(sendingSocket, message.c_str(), message.length(), 0, (struct sockaddr*) &destinationAddress, sizeof(destinationAddress)) == SOCKET_ERROR)
{

    exit(EXIT_FAILURE);
}