客户端服务器通信没有发生。发送功能后不显示客户端代码

client server communication is not happening. The client code is not displaying after send function

我不知道问题出在客户端还是服务器,还是both.This是我的第一个客户端-服务器套接字编程代码。但这没有按预期工作。我引用的代码运行良好。

当代码 运行s 时,客户端和服务器应该都交换 2 条消息,但他们没有这样做。服务器正在显示 "Listening",这是预期的,但是当我 运行 客户端代码时,没有任何反应,它只是什么都不显示。

这是客户端代码

#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;
}

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

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

您想连接到客户端内的服务器套接字(在您的代码中是 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(通常是默认的本地主机地址),而不是 127.0.0.2

代码是 "working" 因为您传递给它的正确套接字描述符 (socketstatus) 没有正确连接到端点,所以它在 send() 调用时失败。