2016-09-17 3 views
0

클라이언트에 문제가 있는지 또는 서버에 문제가 있는지 또는 두 가지 모두에 문제가 있는지 알 수 없습니다. 이것은 내 첫 번째 클라이언트 - 서버 소켓 프로그래밍 코드입니다. 그러나 이것은 예상대로 작동하지 않습니다. 내가 언급 한 코드는 잘 작동한다.

코드가 실행되면 클라이언트와 서버 모두 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; 
} 

답변

2

, 당신은 mysocket을 초기화하지만, 초기화되지 않은 connectserversocket를 전달합니다.

mysocket 대신 serversocket 필드를 설정해야합니다. 당신은 (즉 mysocket을 코드에서 serversocket을하지 않을 것이다) 클라이언트 내부의 서버 소켓에 연결하려는

+0

나는 그것을 얻었다, 어리석은 실수이었다. 고마워요 –

1

:

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되고 싶은 생각 일반적으로 기본 로컬 호스트 주소)가 아니라 127.0.0.2입니다.

올바른 소켓 설명자 (socketstatus)를 끝점에 올바르게 연결하지 않았기 때문에이 코드가 "작동"되었으므로 send() 호출에서 실패합니다.

+0

예, 알겠습니다. 바보 같은 실수였습니다. 감사 –

관련 문제