gpt4 book ai didi

c - 在 C 中通过网络发送/接收数据

转载 作者:太空宇宙 更新时间:2023-11-04 00:25:55 25 4
gpt4 key购买 nike

我写了这个程序:

#include <sys/socket.h>
#include <sys/types.h>
#include <netdb.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

int socket_desc;
struct sockaddr_in adress;
int addrlen;
int new_socket;
int bufsize = 1024;

char *you_sent = "You sent: ";

int main() {
char *buffer = malloc(bufsize);
socket_desc = socket(AF_INET, SOCK_STREAM, 0);
adress.sin_family = AF_INET;
adress.sin_addr.s_addr = INADDR_ANY;
adress.sin_port = htons(7000);
bind(socket_desc, (struct sockaddr *)&adress, sizeof(adress));
listen(socket_desc, 3);
addrlen = sizeof(struct sockaddr_in);
new_socket = accept(socket_desc, (struct sockaddr *)&adress, &addrlen);
while(recv(new_socket,buffer,bufsize,0))
{
printf("I recieved: %s", buffer);
send(new_socket, you_sent, strlen(you_sent), 0);
send(new_socket, buffer, strlen(buffer), 0);
memset(buffer, '\0', sizeof(buffer));
}
}

我可以使用 telnet 连接到服务器。并将内容写入应用程序并从应用程序接收数据。但是我无法理解如何使用另一个 c 程序连接到它并从该程序发送和接收数据。我试过这个:

#include <sys/socket.h>
#include <sys/types.h>
#include <netdb.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

int socket_desc;
struct sockaddr_in adress;
int addrlen;
int new_socket;

char *message_to_send = "Hello world!";

int main() {
socket_desc = socket(AF_INET, SOCK_STREAM, 0);
adress.sin_family = AF_INET;
adress.sin_addr.s_addr = INADDR_ANY;
adress.sin_port = htons(7000);
bind(socket_desc, (struct sockaddr *)&adress, sizeof(adress));
listen(socket_desc, 3);
addrlen = sizeof(struct sockaddr_in);
new_socket = accept(socket_desc, (struct sockaddr *)&adress, &addrlen);
send(new_socket, message_to_send, strlen(message_to_send), 0);
}

最佳答案

服务器就像交换机上的电话接线员。该人执行以下操作:

  • 坐在手机前(即绑定(bind)号码)
  • 等待它响起(即listen)
  • 拿起电话(即accept)

另一端的人只是想给那个人打个电话。 (即 connect)。这个人只需要在需要打电话的时候去接电话。因此不绑定(bind)电话或必须听它响铃。

我希望这个比喻有助于您的理解。

PS:socket部分是墙上的电话 socket 。

关于c - 在 C 中通过网络发送/接收数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13712099/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com