C언어 소켓프로그래밍
청식
질문 제목 : 서버와 클라이언트 연결하는게 잘 안돼요 ㅜㅠ
질문요약 : 소스를 좀 바꿨더니 바꾸기 전처럼 실행이 안돼요 ㅜㅠ
질문내용 :
처음에
클라이언트
#include stdio.h
#include winsock2.h
#include stdlib.h
#include string.h
#define BUFSIZE 256
#pragma comment(lib,ws2_32.lib)
int main(int argc,char* argv[])
{
SOCKET h_socket;
WSADATA wsa;
char message[BUFSIZE];
char serv_addr[BUFSIZE];
char serv_port[BUFSIZE];
FILE *fp;
SOCKADDR_IN SV_addr;
int ms_len;
printf(연결할 서버 주소를 입력하세요 :);
fgets(serv_addr, BUFSIZE, stdin);
printf(연결할 포트 번호를 입력하세요 :);
fgets(serv_port, BUFSIZE, stdin);
fp=fopen(receive.txt,w+);
if(WSAStartup(MAKEWORD(2,2), &wsa) !=0)
{
printf(WSAStartup error!\n);
}
h_socket = socket(AF_INET, SOCK_STREAM,0);
if(h_socket==INVALID_SOCKET)
{
printf(socket error!\n);
}
memset(&SV_addr,0,sizeof(SV_addr));
SV_addr.sin_family = AF_INET;
SV_addr.sin_addr.s_addr=inet_addr(serv_addr);
SV_addr.sin_port = htons((unsigned short)atoi(serv_port));
if(connect(h_socket, (SOCKADDR*)&SV_addr, sizeof(SV_addr)) ==SOCKET_ERROR)
{
printf(connect error!\n);
}
while((ms_len=recv(h_socket,message, BUFSIZE,0))!=0)
{
fwrite(message, sizeof(char), ms_len,fp);
}
fclose(fp);
closesocket(h_socket);
WSACleanup();
return 0;
}
이렇게 하면 연결이 잘돼는데...
#include stdio.h
#include winsock2.h
#include stdlib.h
#include string.h
#includectype.h
#define BUFSIZE 256
#pragma comment(lib,ws2_32.lib)
void Connectsvr();
int Menuprint();
void main()
{
int option;
do
{
system(cls);
option=Menuprint();
switch(option)
{
case 1: Connectsvr(); break;
//case 2: Filedown(); break;
//case 3: Serch(); break;
case 9: break;
default:
{
printf(옵션을 잘못 선택 하셨습니다!\n);
printf(아무키나 누르세요...\n);
getchar();
getchar();
system(cls);
}
}
}while(option!=9);
}
int Menuprint()
{
int option=0;
printf(소켓 연결 프로그램 \n\n);
printf( 1. CONNECT\n 2. FILE DOWN\n 3. SERCH\n 9. 종료\n);
printf($);
fflush(stdin);
scanf(%d,&option);
return option;
}
void Connectsvr(info *inf)
{
SOCKET h_socket;
WSADATA wsa;
char message[BUFSIZE];
char serv_addr[BUFSIZE];
char serv_port[BUFSIZE];
FILE *fp;
SOCKADDR_IN SV_addr;
int ms_len;
printf(연결할 서버 주소를 입력하세요 :);
fgets(serv_addr, BUFSIZE, stdin);
printf(연결할 포트 번호를 입력하세요 :);
fgets(serv_port, BUFSIZE, stdin);
fp=fopen(receive.txt,w+);
if(WSAStartup(MAKEWORD(2,2), &wsa) !=0)
{
printf(WSAStartup error!\n);
}
h_socket = socket(AF_INET, SOCK_STREAM,0);
if(h_socket==INVALID_SOCKET)
{
printf(socket error!\n);
}
memset(&SV_addr,0,sizeof(SV_addr));
SV_addr.sin_family = AF_INET;
SV_addr.sin_addr.s_addr=inet_addr(serv_addr);
SV_addr.sin_port = htons((unsigned short)atoi(serv_port));
if(connect(h_socket, (SOCKADDR*)&SV_addr, sizeof(SV_addr)) ==SOCKET_ERROR)
{
printf(connect error!\n);
}
printf(연결 \n);
while((ms_len=recv(h_socket,message, BUFSIZE,0))!=0)
{
fwrite(message, sizeof(char), ms_len,fp);
}
fclose(fp);
closesocket(h_socket);
WSACleanup();
return 0;
}
이렇게 바꾸고 나서부터 연결이 안돼요 ㅜㅠ
그리구~ 이렇게 바꾸면 fgets부분도 안돼구요 ㅜㅠ 왜그럴까요~????
참고로 이건 서버 소스입니다~~
#include stdio.h
#include winsock2.h
#include stdlib.h
#include string.h
#define BUFSIZE 256
#pragma comment(lib,ws2_32.lib)
int main()
{
WSADATA wsa;
SOCKET SV_socket;
SOCKET CL_socket;
FILE* fp;
SOCKADDR_IN SV_addr;
SOCKADDR_IN CL_addr;
int sz_CLaddr;
int ms_len;
char message[BUFSIZE];
char input_port[BUFSIZE];
printf(서버가 사용할 포트번호를 입력하시오 :);
fgets(input_port, BUFSIZE, stdin);
fp=fopen(memo.txt,r);
if(fp==NULL)
{
printf(File open error!\n);
}
if(WSAStartup(MAKEWORD(2,2), &wsa) !=0)
return -1;
SV_socket = socket(AF_INET, SOCK_STREAM,0);
if(SV_socket==INVALID_SOCKET)
{
printf(socket error!\n);
}
memset(&SV_addr,0,sizeof(SV_addr));
SV_addr.sin_family = AF_INET;
SV_addr.sin_addr.s_addr=htonl(INADDR_ANY);
SV_addr.sin_port = htons((unsigned short)atoi(input_p(input_port));
if(bind(SV_socket,(SOCKADDR*)&SV_addr,sizeof(SV_addr))==SOCKET_ERROR)
{
printf(bind error!\n);
}
if(listen(SV_socket, 5)==SOCKET_ERROR)
{
printf(listen error!\n);
}
sz_CLaddr = sizeof(CL_addr);
CL_socket = accept(SV_socket, (SOCKADDR *)&CL_addr,&sz_CLaddr);
if(CL_socket==INVALID_SOCKET)
{
printf(accept error!\n);
}
printf(\n클라이언트 접속 IP주소 = %s, 포트번호 = %d\n,inet_ntoa(CL_addr.sin_addr),ntohs(CL_addr.sin_port));
while(1)
{
ms_len=fread(message, sizeof(char), BUFSIZE, fp);
send(CL_socket, message, ms_len, 0);
if(feof(fp))
break;
}
if(shutdown(CL_socket, SD_SEND) == SOCKET_ERROR)
{
printf(shutdown error!\n);
}
ms_len = recv(CL_socket, message, BUFSIZE-1, 0);
message[ms_len]=0;
fputs(message, stdout);
fclose(fp);
closesocket(CL_socket);
WSACleanup();
return 0;
}
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2692343 | scnaf에 자꾸 선언을 참조하라는데;; (8) | 도래 | 2025-04-22 |
2692282 | 도스상에서 생성된 exe파일에 press~ 뜨게 하기 (4) | 회사원 | 2025-04-21 |
2692256 | scanf("%*c"); ㅠㅠ 고수님들 | 거북이 | 2025-04-21 |
2692230 | 하노이탑 질문입니다. (1) | 미쁘다 | 2025-04-21 |
2692210 | 정보 올림피아드 문제인데.. 풀이 과정이 궁금합니다.(재귀함수) (5) | 물티슈 | 2025-04-20 |
2692144 | C언어와 리눅스에 대한 질문입니다. | 싴흐한세여니 | 2025-04-20 |
2692114 | 컨텍스트 스위칭하는데 걸리는 시간 측정.. | YourWay | 2025-04-19 |
2692086 | 간접참조 연산자, 증감연산자 질문이용! (2) | 블랙캣 | 2025-04-19 |
2692056 | 주석좀 달아주세요. 몇개적엇는데 몇개만달아주세요. (2) | DevilsTears | 2025-04-19 |
2691978 | 진수 쉽게 이해하는법... (3) | 지지않는 | 2025-04-18 |
2691949 | getchar() 한 문자를 입력받는 함수 질문 | 채꽃 | 2025-04-18 |
2691919 | 배열 정렬 및 합치기 질문입니다. | 사과 | 2025-04-18 |
2691845 | c언어왕초보 질문이 있습니다........ | 루나 | 2025-04-17 |
2691815 | void add(int num); 함수... (4) | 살랑살랑 | 2025-04-17 |
2691756 | 명령 프롬프트 스크롤바가 없어요 | 두메꽃 | 2025-04-16 |
2691725 | 자료구조에 관련해서 질문이 있어 글을 올립니다. | 누리알찬 | 2025-04-16 |
2691697 | if 문에서 구조체 배열에 저장되있던 문자열 검사하는 법 ? (2) | 민트맛사탕 | 2025-04-16 |
2691678 | C언어 함수 질문이요~!!! | 연보라 | 2025-04-15 |
2691650 | 반복문 | 돋가이 | 2025-04-15 |
2691618 | 링크드리스트 개념 질문이예요 (3) | 맨마루 | 2025-04-15 |