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

时间:2016-09-17 17:11:50

标签: c sockets network-programming client-server

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

当代码运行时,客户端和服务器都应该交换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;
}

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

您想要连接到客户端内的服务器套接字(代码中为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

代码是&#34;工作&#34;因为您传递的正确套接字描述符(socketstatus)未正确连接到端点,因此它在send()调用时失败。