[소켓] 윈도우 리눅스 tcp/ip연결 도와주세요!!!!
글쓴이: kei lina / 작성시간: 목, 2019/10/03 - 9:50오후
윈도우 client와 리눅스 server간 tcp / ip 를 통한 문자열 전송프로그램을 생성하는 것이 목표입니다.
하지만 리눅스 서버에서 listen 까지는 진행이 되는데 윈도우 client에서 프로그램을 실행해도 리눅스 서버의 프로그램에서 accept로 진행이 되지 않네요 ㅠㅠ
리눅스 server ip = 192.168.57.146 입니다.
//리눅스 server================================================================================= #include<stdio.h> #include<stdlib.h> #include<string.h> #include<unistd.h> #include<arpa/inet.h> #include<sys/types.h> #include<sys/socket.h> #define BUFF_SIZE 1024 int main(){ int server_socket; int client_socket; int client_addr_size; struct sockaddr_in server_addr; struct sockaddr_in client_addr; char buff_rcv[BUFF_SIZE+5]; char buff_snd[BUFF_SIZE+5]; server_socket=socket(PF_INET,SOCK_STREAM,0); memset(&server_addr,0,sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(4000); server_addr.sin_addr.s_addr = inet_addr("192.168.57.146"); bind(server_socket,(struct sockaddr*)&server_addr,sizeof(server_addr)); printf("bind okay\n"); listen(server_socket,5); printf("listen okay\n"); client_addr_size = sizeof(client_addr); client_socket = accept(server_socket,(struct sockaddr*)&client_addr,(socklen_t*)&client_addr_size); printf("accept okay\n"); if(-1==client_socket){ printf("client connect error\n"); exit(1); } read(client_socket,buff_rcv,BUFF_SIZE); printf("receive: %s\n",buff_rcv); close(client_socket); }
//윈도우 client=========================================================================== #define _WINSOCK_DEPRECATED_NO_WARNINGS #define _CRT_SECURE_NO_WARNINGS #pragma comment(lib, "ws2_32.lib") #include <winsock2.h> #include <stdio.h> #include<time.h> #include<string.h> int main() { SOCKADDR_IN serveraddr; WSADATA wsa; int client_len; char buf[1024]; WSAStartup(MAKEWORD(2, 2), &wsa); SOCKET s; s = socket(AF_INET, SOCK_DGRAM, 0); if (s == INVALID_SOCKET) { printf("socket error!\n"); return -1; } serveraddr.sin_addr.s_addr = inet_addr("192.168.57.146"); serveraddr.sin_port = htons(4000); serveraddr.sin_family = AF_INET; connect(s, (SOCKADDR *)&serveraddr, sizeof(serveraddr)); memset(buf, 0, sizeof(buf)); printf("보낼 내용 입력 : "); scanf("%s", buf); send(s, buf, strlen(buf), 0); closesocket(s); WSACleanup(); return 0; }
Forums:
코드는 대충 봤는데 문제 없는 것 같군요. 아마도요.
코드는 대충 봤는데 문제 없는 것 같군요. 아마도요.
네트워크 프로그래밍의 troubleshooting은 좀 골치가 아픈 편인데, 왜냐하면 네트워크 프로그래밍이란 두 어플리케이션이 마법처럼 그냥 연결되는 것이 아니라 그 사이에 수많은 소프트웨어/하드웨어가 관여하고 있기 때문이지요. 그리고 그 중 어디에서든 뭔가 잘못 설정되어 있을 수 있습니다.
직접 현장에 가서 좀 조사해 보면 간단히 해결될 문제일 수도 아닐 수도 있지요.
가장 있을법한 원인을 예로 들어 본다면...
1. 192.168.57.146라는 ip로 서버에 접근이 가능한 건 맞나요? 내부 네트워크용 ip로 보이는군요. 서버와 클라이언트가 같은 서브 네트워크에 있는 게 맞는지 확인해보시고, 만약 그렇지 않다면 클라이언트가 서버에 접속하기 위해 적절한 설정이 필요할 수도 있습니다. 포트 포워딩이라던가.
2. 해당 ip로 접근이 가능한데도 접속이 안 된다면, 그 다음으로 체크해 볼 만한 건 방화벽입니다. 이 경우엔 서버 쪽에 tcp 포트의 화이트리스트를 관리하는 방화벽이 있을 가능성이 높아요. 혹시 우분투 쓰시면 ufw 찾아보시길. 물론 클라이언트의 방화벽 문제일 수도 있습니다.
코드는 대충 봤는데 뭔가 좀 이상합니다
뭔가 좀 빠진거 같습니다
인터넷에서 다른 소스 찾아보고 참고하면 해결될거 같습니다
그리고, 보통의 경우 보낼내용 입력받은 다음에 소켓을 엽니다
3년이나 지난글이라 이글을 보실지는 모르겠지만
3년이나 지난 글이라 이 글을 보실지 모르겠지만
서버는 TCP 고 클라이언트는 UDP 네요..
---
http://github.com/sephid86
---
댓글 달기