如何通过特定端口通过 TCP 套接字从服务器发送

问题描述 投票:0回答:0

我有一个服务器(在 C 中)获取客户端发送的消息,然后服务器应该发送一个答案。客户端通过端口(例如 1345)发送消息,应该通过不同的端口(例如 2345)获得答案。

收到客户端的消息,但不知道为什么2345端口无法得到回复

服务器的代码是:

void *CreateTCPSocket(void *p) {
    
    int srcPort = 1345;
    int dstPort = 2345;
    struct sockaddr_in sockaddr_from;
    struct sockaddr_in sockaddr_to;
    int sockaddr_from_len = sizeof(sockaddr_from);
    int sockaddr_to_len = sizeof(sockaddr_to);
    uint8_t recv_message[MSS];
    bool msg_received = false;


    // Create TCP socket
    int fd_sock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
    
    if (fd_sock == -1){
        exit(1);
    }

    // Configure src port
    sockaddr_from.sin_family = AF_INET;
    sockaddr_from.sin_port = htons(srcPort);
    sockaddr_from.sin_addr = ip_src;

    sockaddr_to.sin_family = AF_INET;
    sockaddr_to.sin_port = htons(destPort);
    sockaddr_to.sin_addr = ip_dst;

    if((ret_bind = bind(fd_sock, (struct sockaddr*)&sockaddr_from, sizeof(sockaddr_from))) < 0){
        perror("ERROR bind");
        exit(1);
    } 

    while(1){
        if (listen(fd_sock, 100) < 0) {
            perror("listen");
            exit(EXIT_FAILURE);
         }
  
        new_socket = accept(fd_sock, (struct sockaddr*)&sockaddr_from,(socklen_t*)&sockaddr_from_len)

        if (new_socket > 0){
            int res_sock = recvfrom(new_socket, recv_message, MSS, 0, (struct sockaddr *)&sockaddr_from, (socklen_t*)&sockaddr_from_len);
            
                msg_received = true;
            
        }

        char* sendMessage = getTCPMessageOut();             
            
        int sent_bytes = strlen(sendMessage);
        int res_sock = -1;

        while (sent_bytes>0) {
            res_sock = sendto(new_socket, sendMessage, sizeof(sendMessage), MSG_NOSIGNAL, (struct sockaddr *)&cfg->sockaddr_to, (socklen_t)sizeof(cfg->sockaddr_to));
            if (res_sock > -1){
                break;
            }
            sent_bytes-=res_sock;
        }
        
        if (res_sock == -1){
            perror("Send Error");
               exit(EXIT_FAILURE);
        }
    }
}

如果我对客户端和服务器使用相同的端口,代码就可以工作。问题只是通过不同的端口发送消息。

c sockets tcp tcpserver
© www.soinside.com 2019 - 2024. All rights reserved.