c++ - 套接字发送问题

标签 c++ sockets

为什么这不起作用?

[PseudoCode]
    main() {
       for (int i = 0; i < 10000; ++i) {
          send(i, "abc", 3, 0);
       }
    }

我的意思是,要通过从 0 到 10000 的每个数字发送“abc”,理论上我们不是通过许多不同的套接字传递吗?大多数 0 到 10000 之间的数字不会对应任何套接字,但有些会。这是正确的吗?

编辑:期望的目标是通过每个具有打开套接字的应用程序发送“abc”。

最佳答案

那永远行不通。文件描述符仅在同一进程(及其子进程)中有用。

你必须创建一个套接字(这会给你一个你拥有并可以使用的文件描述符),将它连接到一个端点(当然必须打开并监听)然后你才能通过它发送一些东西.

对于 example :

struct sockaddr_in pin;
struct hostent *hp;

/* go find out about the desired host machine */
if ((hp = gethostbyname("foobar.com")) == 0) {
    exit(1);
}

/* fill in the socket structure with host information */
memset(&pin, 0, sizeof(pin));
pin.sin_family = AF_INET;
pin.sin_addr.s_addr = ((struct in_addr *)(hp->h_addr))->s_addr;
pin.sin_port = htons(PORT);

/* grab an Internet domain socket: sd is the file descriptor */
if ((sd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
    exit(1);
}

/* connect to PORT on HOST */
if (connect(sd,(struct sockaddr *)  &pin, sizeof(pin)) == -1) {
    exit(1);
}

/* send a message to the server PORT on machine HOST */
if (send(sd, argv[1], strlen(argv[1]), 0) == -1) {
    exit(1);
}

硬币的另一面是创建一个监听套接字(服务器所做的),它将接收连接。过程类似,但调用发生了变化,它们是 socket()、bind()、listen()、accept()。不过,您必须创建一个套接字以在您自己的进程中获取文件描述符,并知道您想要监听或连接到哪里。

关于c++ - 套接字发送问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1314775/

相关文章:

c++ - 如何在开放源IDE(codelite)中迁移到C++ 11

c++ - 如何将运算符作为参数传递

multithreading - Haskell - 线程时缓慢的套接字连接

java - 同时建立多个 TCP 连接

c++ - 将字符串函数复制到非 const char 缓冲区

c++ - 移位运算符如何在两个整数中查找不同位数?

字符数组在 UDP 客户端打印随机垃圾

sockets - 作用于 UDP 套接字时,什么会导致 sendto() 发送的字节数少于请求的字节数?

c# - 如何使用套接字正确发送和接收字节/文件?

c++ - C++ 中的引用和指针类型转换