윈도우와 리눅스 사이의 소켓 통신

  • hminkoo92
    hminkoo92

    질문

    서버 : 리눅스
    클라이언트 : 윈도우

    로 놓고 소켓통신을 하려고 합니다.
    가장 기본적인 Echo Server/Client로 하구있구요
    (클라이언트가 서버에 메시지를 보내면
    서버는 다시 클라이언트에게 그 메세지를 메아리처럼 보내는 프로그램)

    서버 실행후 클라이언트를 실행 했을 때
    클라이언트에서 커넥션에러가 발생하면서 연결이 안되더라구요

    왜 연결이 안되는지 모르겠습니다.
    어디에 문제가 있는걸까요

    리눅스 Server Code

    #include <sys/socket.h>
    #include <sys/stat.h>
    #include <arpa/inet.h>
    #include <stdio.h>
    #include <string.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include "unp.h"
    #define MAXBUF 4096 // make length with server and client
    //int main(int argc, char **argv)
    int main(int argc, char *argv[])
    {
        int server_sockfd, client_sockfd;
        int client_len, n;
        char buf[MAXBUF];
        struct sockaddr_in clientaddr, serveraddr;
    
        client_len = sizeof(clientaddr);
    
        if((server_sockfd = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1)
        {
            perror("socket error : ");
            exit(0);
        }
        memset(&serveraddr,0X00,sizeof(serveraddr));
        serveraddr.sin_family = AF_INET;
        serveraddr.sin_addr.s_addr = htonl(INADDR_ANY);
        serveraddr.sin_port = htons(SERV_PORT);
    
        bind(server_sockfd, (struct sockaddr *)&serveraddr, sizeof(serveraddr));
        listen(server_sockfd, 5);
    
        while(1)
        {
            memset(buf,0X00,MAXBUF);
            client_sockfd = accept(server_sockfd, (struct sockaddr *)&clientaddr, &client_len);
            printf(" New Client Connect: %s\n", inet_ntoa(clientaddr.sin_addr));
            if((n =read(client_sockfd, buf, MAXBUF)) < 0)
            {
                close(client_sockfd);
                continue;
            }
            if(write(client_sockfd, buf, MAXBUF) < 0 )
            {
                perror("write error :");
                close(client_sockfd);
            }
            close(client_sockfd);
        }
        close(server_sockfd);
        return 0;
    }  
    

    Window Client Code

    #include<stdio.h>
    #include<winsock2.h>
    // Window Client version 
    #define PORT        3500
    #define IP      "127.0.0.1"
    
    void main(void)
    {
        WSADATA WSAData;
        SOCKADDR_IN addr;
        SOCKET s;
        char buffer[4096];
        int readbytes;
        int i, len;
    
        if (WSAStartup(MAKEWORD(2, 2), &WSAData) != 0)
        {
            return 1;
        }
    
        s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    
        if (s == INVALID_SOCKET)
        {
            return 1;
        }
    
        addr.sin_family = AF_INET;
        addr.sin_port = htons(PORT);
        addr.sin_addr.S_un.S_addr = inet_addr(IP);
    
        if (connect(s, (struct sockaddr *)&addr, sizeof(addr)) == SOCKET_ERROR)
        {
            printf("fail to connect\n");
            closesocket(s);
            return 1;
        }
    
        printf("enter messages\n");
    
        for (i = 0; 1; i++)
        {
            buffer[i] = getchar();
            if (buffer[i] == '\n')
            {
                buffer[i++] = '\n';
                break;
            }
        }
    
        len = i;
    
        printf("send messages(%d bytes)\n", len);
        send(s, buffer, len, 0);
    
        for (readbytes = 0; readbytes<len;)
            readbytes += recv(s, buffer + readbytes, len - readbytes, 0);
    
        printf("recv messages = %s\n", buffer);
    
        closesocket(s);
        WSACleanup();
        return 0;
    }
    

    8년 전
1개의 댓글이 있습니다.
  • JongMan
    JongMan

    이 질문은 이 사이트의 주제와 상관이 없는 것 같네요. 다른 프로그래밍 포럼에 질문하시길 추천드립니다.


    8년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.