2014-03-05 51 views
1

我有这个简单的客户端服务器写在C下面。客户端向服务器发送2个号码,服务器向客户端发回2个号码的总和。我的问题是从服务器发送回客户端,我看不出为什么它不起作用。它不会给出任何错误,只是receivedData变量未填充所需的int。客户端成功向服务器发送2个数字的数据包,服务器成功接收数据包。C客户端服务器不能正常工作

请注意,这只是一个教学示例,我没有使用线程来处理客户端。它只是一个客户端和一个服务器。

这里是服务器:

// SERVER 
#include <stdio.h> 
#include <sys/types.h> 
#include <sys/socket.h> 
#include <signal.h> 
#include <netinet/in.h> 
#include <string.h> 
#include <stdlib.h> 

#define PORT 2012 

struct Packet 
{ 
    int a; 
    int b; 
}; 


int main() 
{ 
    struct sockaddr_in clientAddress; 
    int sd; 

    if((sd = socket(AF_INET, SOCK_STREAM, 0)) < 0) 
    { 
     printf("Error creating socketsss\n"); 
    } 

    memset(&clientAddress, 0, sizeof(clientAddress)); 

    clientAddress.sin_family = AF_INET; 
    clientAddress.sin_port = htons(PORT); 
    clientAddress.sin_addr.s_addr = htonl(INADDR_ANY); 

    if(bind(sd, (struct sockaddr*)&clientAddress, sizeof(clientAddress)) < 0) 
    { 
     printf("Bind error\n"); 
    } 

    if(listen(sd, 5) < 0) 
    { 
     printf("Listen error\n"); 
    } 

    unsigned int len = 0; 

    int fd = accept(sd, (struct sockaddr*)&clientAddress, &len); 

    struct Packet received; 

    if(recv(fd, &received, sizeof(struct Packet), 0) < 0) 
    { 
     printf("Receive error"); 
    } 

    int sum = received.a + received.b; 

    printf("Numarul ce trebui trimis este %d\n", sum); 

    if(send(sd, &sum, sizeof(sum), 0) < 0) 
    { 
     printf("Error sending data\n"); 
    } 

    return 0; 
} 

这里是客户端:

// CLIENT 
#include <sys/types.h> 
#include <sys/socket.h> 
#include <netinet/in.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

#define SERVER_IP "127.0.0.1" 
#define PORT 2012 

struct Packet 
{ 
    int a; 
    int b; 
}; 

int main() 
{ 
    struct sockaddr_in serverAddress; 
    int sd; 

    if((sd = socket(AF_INET,SOCK_STREAM,0)) < 0) 
    { 
     printf("Error creating socket\n"); 
    } 

    memset((char *)&serverAddress, 0, sizeof(serverAddress)); 

    serverAddress.sin_family = AF_INET; 
    serverAddress.sin_addr.s_addr = inet_addr(SERVER_IP); 
    serverAddress.sin_port = htons(PORT); 

    if ((connect(sd,(struct sockaddr *)&serverAddress, sizeof(serverAddress))) < 0) 
    { 
     printf("Error connectiong to server!\n"); 
    } 

    struct Packet packToSend; 
    packToSend.a = 14; 
    packToSend.b = 21; 

    if(send(sd, &packToSend, sizeof(packToSend), 0) < 0) 
    { 
     printf("Error sending data\n"); 
    } 

    int receivedData = 0; 

    if(recv(sd, &receivedData, sizeof(int), 0) < 0) 
    { 
     printf("Receive error\n"); 
    } 

    printf("I received %d \n", receivedData); 

    return 0; 
} 

谢谢!

回答

2

您正在收听套接字,而不是您接受的套接字。

+0

yupp,在你的服务器程序中:'send(sd ...)'应该是'send(fd ...)' – turbulencetoo

+0

谢谢!我保证我不会复制/粘贴... –

相关问题