简单的客户端/服务器在C中打印msg TCP

时间:2017-04-11 11:34:25

标签: c tcp server printf client

我最近开始在C中使用TCP套接字(我还不熟悉这些套接字),在我弄清楚它们背后的理论之后,我尝试创建一个简单的服务器/客户端,客户端需要来自服务器的字符串,然后将其打印出来。

这是服务器的代码:

//SERVER
#include<stdio.h>    
#include<sys/socket.h>    
#include<netinet/in.h>    
#include<string.h>    
#include<sys/types.h>    
#include<stdlib.h>    
#include<unistd.h>    
#include<errno.h>    
#include<netdb.h>    
#include<arpa/inet.h>    
#include<sys/wait.h>    
#include<signal.h>

#define BACKLOG 5

int main(){

    char *msg;

    int len, bytes_sent;

    struct sockaddr_storage their_addr;

    socklen_t addr_size;

    struct addrinfo hints, *res;

    int sockfd,new_fd;


    memset(&hints,0,sizeof hints);

    hints.ai_family = AF_UNSPEC;

    hints.ai_socktype = SOCK_STREAM;

    hints.ai_flags = AI_PASSIVE;


    getaddrinfo("127.0.0.1", "3940", &hints, &res);

    sockfd = socket(res->ai_family, res->ai_socktype, res->ai_protocol);

    bind(sockfd, res->ai_addr, res->ai_addrlen);


    if(listen(sockfd, BACKLOG) == 0){

        printf("Listening\n");

        }

    else{

        printf("Error\n");

        exit(1);

        }


    addr_size = sizeof their_addr;

    new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &addr_size);

    strcpy(msg, "HELLO WORLD!");

    len = strlen(msg);

    bytes_sent = send(new_fd,msg,len,0);


    printf("\nMessage sent");

    close(new_fd);

    close(sockfd);

    freeaddrinfo(res);

    return 0;
}

这是客户端的代码:

//CLIENT
#include<stdio.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<string.h>
#include<sys/types.h>
#include<stdlib.h>
#include<unistd.h>
#include<errno.h>
#include<netdb.h>
#include<arpa/inet.h>
#include<sys/wait.h>
#include<signal.h>

int main(){

    int sockfd;
    char buffer[1024];
    struct addrinfo hints, *res;

    memset(&hints,0,sizeof hints);
    hints.ai_family = AF_UNSPEC;
    hints.ai_socktype = SOCK_STREAM;
    getaddrinfo("127.0.0.1", "3940", &hints, &res);
    sockfd = socket(res->ai_family,res->ai_socktype, res->ai_protocol);

    connect(sockfd, res->ai_addr, res->ai_addrlen);


    recv(sockfd, buffer, 1024, 0);

    printf("Data received: %s\n",buffer);

    close(sockfd);

    return 0;
}   

现在问题出在这里。它应该发生的是客户应该打印一个简单的Data received : HELLO WORLD。关键是它确实如此,但也打印了一些我不理解的东西,并且无法弄清楚它为什么会这样做。这是客户端结果的图片(我在虚拟机上使用Linux)

enter image description here

正如您在HELLO WORLD之后所看到的,客户打印了3个字符。

我知道这个问题可能是我错过的一个检查(或类似的事情),但我已经说过我还是新手,所以我不知道还有什么要添加或者我不应该在代码中加入什么。 提前谢谢!

0 个答案:

没有答案