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

标签 c sockets network-programming client-server

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

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

关于客户端服务器通信没有发生。发送功能后不显示客户端代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39549586/

相关文章:

python - 从Python脚本中的多个UDP套接字监听

Mysql多实例无法通过socket连接

browser - 开始浏览时发送的第一个数据包

c++ - openssl EVP 随机解密失败

C错误: expected ';' or ',' or ")' ?

C 字符串赋值给出段错误

java - 为什么 .readUTF() over socket 会因小文件而失败?

c++ - 在 UDP 套接字上多次调用 connect() 以发送到不同的目标地址 - 有效吗?

Java 网络、错误检查和数据库

c - 注册一个新的线程处理程序,如 pthread_atfork 或 atexit