繁体   English   中英

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

[英]C, network programming - sockets. One socket for read, another for write - possible?

我编写了一个简单的客户端,与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)仅用于写入?

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

只需使用绑定到服务器侧两个不同端口的两个单独的套接字即可,此处无火箭技术。 问题是:您为什么要这样做?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM