c - 服务器客户端程序未定义行为

标签 c linux sockets network-programming

我正在用 Linux 编写服务器客户端聊天程序。由于某种原因,代码没有按预期工作。

问题出在客户端代码中,在 while 循环内,编译器不会在 scanf 处等待 获取输入,而是自己向服务器发送一些垃圾数据 ,作为返回,服务器也发送一些数据,客户端程序终止

由于我的知识有限,我无法找出问题所在,非常感谢您的帮助。

Server.c

#define PORT 3690

#define MaxBufferLength 1024


int main()
{
    int sockFd, bytesRead, bytesSent;

    char buffer[MaxBufferLength];

    struct sockaddr_in server, client;


    server.sin_port= htons(PORT);
    server.sin_family = AF_INET;
    server.sin_addr.s_addr = htonl(INADDR_ANY);
    sockFd = socket(AF_INET, SOCK_STREAM, 0);


    if(sockFd == -1)
        printf("Unable to open socket\n");


    int i = bind(sockFd, (struct sockaddr *) &server, sizeof(struct sockaddr));

    if(i == -1)
        perror("Unable to bind\n");



    i = listen(sockFd, 1);

    if(i == -1)
        printf("Unable to listen\n");




    int connectionSocket = accept(sockFd, (struct sockaddr *) &client, sizeof(struct sockaddr));

    if(connectionSocket == 1)
        printf("connection established\n");


    while(1)
    {           
        bytesRead = recv(connectionSocket, buffer, MaxBufferLength, 0);

        buffer[bytesRead] = '\0';

        printf("Client said: \n     %s\n", buffer);


        scanf("\n\n = %s", buffer);

        bytesSent = send(connectionSocket, buffer, strlen(buffer), 0);

        if(bytesSent == -1)
            perror("Failed to send a message");

        connectionSocket = accept(sockFd, (struct sockaddr *) &client, sizeof(struct sockaddr)); // wait for connection again
    }


    close(sockFd);

    return 0;



}

问候

最佳答案

这可能会导致问题。

sizeof(struct sockaddr) ==>sizeof(struct sockaddr_in) or sizeof(server)

int connection = connect(sockFd, (struct sockaddr *) &server, sizeof(server) )

scanf("Enter message: \n\n = %s", buffer); 
          |
          V 
printf("Enter message: ");
scanf("%s",buffer);   

参见 Networking and Socket programming tutorial in C

关于c - 服务器客户端程序未定义行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19011130/

相关文章:

linux - nslookup - 仅返回主机的 IP 地址

linux - 自停尾操作

c - 线程函数内部函数中的信号量值不一致

c - 哪些程序使用 GSS-API?有什么不错的示例程序吗?

linux - shell脚本停止错误

c - 数据链路套接字读取传出数据包?

java - 发送文件的客户端/服务器卡在某处

java - 为什么关闭客户端后服务器停止运行?

c - fgets 和 sscanf 在 c 中被跳过?

c - C中的程序无故停止