【问题标题】:client server communication is not happening. The client code is not displaying after send function没有发生客户端服务器通信。发送功能后客户端代码不显示
【发布时间】:2016-09-17 17:11:50
【问题描述】:

我不知道问题出在客户端还是服务器或两者兼而有之。这是我的第一个客户端-服务器套接字编程代码。但这并没有按预期工作。我引用的代码虽然运行良好。

当代码运行时,客户端和服务器都应该交换 2 条消息,但他们没有这样做。服务器正在显示“正在侦听”,这是正确的,但是当我运行客户端代码时,什么都没有发生,它什么也不显示。

这是客户端代码

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

int main() {
    struct sockaddr_in mysocket, servsocket;
    int err;
    char buf[256];



    //CREATING SOCKET
    int socketstatus = socket(AF_INET, SOCK_STREAM, 0);
    printf("%d\n", socketstatus);
    if(socketstatus < 0){
        printf("socket failed\n");
        scanf("%d", &err);
        return 0;
    }



    bzero((char *) &mysocket, sizeof(mysocket));
    mysocket.sin_family = AF_INET;
    mysocket.sin_addr.s_addr = inet_addr("127.0.0.2");
    int port = 5674;
    mysocket.sin_port = htons(port);


    //CONNECT

    int connectstatus = connect(socketstatus, (struct sockaddr *) &servsocket, sizeof(servsocket));
    if(connectstatus < 0){
        printf("Connect failed\n");
        scanf("%d", &err);  
        return 0;
    }

    //SEND

    bzero(buf, 256);
    strcpy(buf, "Message sent by client");
    int sendstatus = send(socketstatus, buf, 256, 0);
    printf("2\n");               //This is not being displayed
    if(sendstatus < 0){
        printf("Client send failed\n");
        return 0;
    }
    printf("Reached for receiving\n");
    //RECEIVE
    bzero(buf, 256);
    int recvstatus = recv(socketstatus, buf, 256, 0);
    if(recvstatus < 0){
        printf("Client RECEIVE failed\n");
        scanf("%d", &err);
        return 0;
    }

    printf("The message client got from server is, %s \n",buf );

    scanf("%d", &err);

    printf("Bye");

}



这是服务器代码:

#include <stdio.h>
#include <string.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <unistd.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
int main() {
    int err;
    struct sockaddr_in servsocket, clientsocket;
    char sendmessage[256];

    //CREATING SOCKET
    int mysocket = socket(AF_INET, SOCK_STREAM, 0);
    if(mysocket < 0){
        printf("socket creation failed\n");
        scanf("%d", &err);
        return 0;
    }

    bzero((char*) &servsocket, sizeof(servsocket));    //initiazlizing servsocket with null
    servsocket.sin_family = AF_INET;
    servsocket.sin_addr.s_addr = inet_addr("127.0.0.2");
    int port = 5674;
    servsocket.sin_port = htons(port);

    //BINDING
    int bindstatus = bind(mysocket, (struct sockaddr*) &servsocket, sizeof(servsocket));
    if(bindstatus < 0){
        printf("Socket bind failed\n");
        scanf("%d", &err);
        return 1;
    }

    //LISTENING
    int listenstatus = listen(mysocket, 5);
    if(listenstatus < 0){
        scanf("%d", &err);
        return 2;
    }
    else
        printf("LISTENING....\n");
    //ACCEPTING
    int clientsize = sizeof(clientsocket);
    int acceptstatus = accept(mysocket, (struct sockaddr*) &clientsocket, &clientsize);
    if(acceptstatus < 0){
        printf("Accept failed");
        scanf("%d", &err);
        return 3;
    }

    char buf[256];
    bzero(buf, 256);

    //RECEIVING

    int recvstatus = recv(acceptstatus, buf, 256, 0);
    if(buf < 0){
        printf("Error:Nothing read");
        scanf("%d", &err);
        return 4;
    }

    printf("I received this message, %s \n", buf);
    printf("NOW I WILL SEND\n");

    //SENDING
    bzero(sendmessage, 256);
    strcpy(sendmessage, "Message sent by server");
    int sendstatus = send(acceptstatus, sendmessage, sizeof(sendmessage), 0);
    if(sendstatus < 0){
        printf("Error sending\n");
        scanf("%d", &err);
        return 5;
    }
    return 0;
}

【问题讨论】:

    标签: c sockets network-programming client-server


    【解决方案1】:

    在客户端代码中,您初始化 mysocket,但将 serversocket 传递给未初始化的 connect

    您应该设置serversocket 的字段而不是mysocket

    【讨论】:

      【解决方案2】:

      您想连接到客户端内的服务器套接字(在您的代码中是 serversocket,而不是 mysocket):

      bzero((char *) &servsocket, sizeof(servsocket));
      servsocket.sin_family = AF_INET;
      servsocket.sin_addr.s_addr = inet_addr("127.0.0.2");
      int port = 5674;
      servsocket.sin_port = htons(port);
      

      然后,我认为您希望您的 inet 地址为 127.0.0.1(通常是默认的 localhost 地址),而不是 127.0.0.2

      代码正在“工作”,因为您传递了正确的套接字描述符 (socketstatus),它没有正确连接到端点,因此它在 send() 调用时失败。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-08
        • 1970-01-01
        • 1970-01-01
        • 2021-12-04
        • 1970-01-01
        • 1970-01-01
        • 2014-05-12
        • 1970-01-01
        相关资源
        最近更新 更多