gpt4 book ai didi

C、网络编程——套接字。一个用于读取的套接字,另一个用于写入的套接字 - 可能吗?

转载 作者:行者123 更新时间:2023-12-03 11:51:44 29 4
gpt4 key购买 nike

我用 C 编写了一个简单的客户端来与我的回显服务器通信:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <netdb.h>

#define SIZE 1024

int main(int argc, char **argv)
{
char buffer[SIZE+1];
int port = 6666;
char msg[1000];

int sockfd, recv_size;
struct sockaddr_in server_addr;

if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
perror("socket");
exit(1);
}

server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(port);
inet_aton("127.0.0.1", &server_addr.sin_addr);

if (connect(sockfd, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1)
{
perror("connect");
exit(1);
}

while (1)
{
printf("> ");
fgets (msg, 999, stdin);

if ((send(sockfd, msg, strlen(msg), 0) < 0))
{
close(sockfd);
if (errno != 0)
{
perror("recv");
exit(1);
}
}

if ((recv_size = recv(sockfd, buffer, SIZE, 0)) == 0)
{
close(sockfd);
if (errno != 0)
{
perror("recv");
exit(1);
}
}

buffer[recv_size] = '\0';
printf("FROM SERVER: %s\n", buffer);
}

close(sockfd);

return 0;

}

我想知道,是否可以将一个套接字用于只读(在端口上,比如说 6666),另一个套接字(端口 6667)用于只写?

那我应该如何实现服务器呢?

最佳答案

只需使用两个单独的套接字绑定(bind)到服务器端的两个不同端口,这里没有火箭科学。问题是:你为什么要这样做?

关于C、网络编程——套接字。一个用于读取的套接字,另一个用于写入的套接字 - 可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42513533/

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