정말 도저히 원인을 모르겠습니다.
불꾼
질문 제목 : 디버그모드로 파일전송프로그램을 실행했을떄와 직접 프로그램을 실행시켜서 전송 프로그램을 실행했을떄파일전송하는 프로그램 에 관해서 디버그 모드로 실행하면 파일입출력 오류가 나고, 실행파일을 직접 실행시켜서 동작시키면 전송이 아주 잘됩니다. 도대체 왜 차이가 나는지 모르겠어요 이것떄문에 3시간째 헤매는 중........ㅠㅠ질문 내용 :
아래 소스는 어느 책에다 기본적으로 다있는 전송 프로그램 코드인데, 디버그모드는 안되고 직접 실행은 됩니다..
왜 그런거죠.. 디버그 모드로만 계속하다 안되는줄 알고 3시간동안 해멧어요..#include winsock2.h
#include stdlib.h
#include stdio.h
#define bufsize 4096
// 소켓 함수 오류 출력 후 종료
void err_quit(char *msg)
{
lpvoid lpmsgbuf;
formatmessage(
format_message_allocate_buffer|
format_message_from_system,
null, wsagetlasterror(),
makelangid(lang_neutral, sublang_default),
(lptstr)&lpmsgbuf, 0, null);
messagebox(null, (lpctstr)lpmsgbuf, msg, mb_iconerror);
localfree(lpmsgbuf);
exit(-1);
}
// 소켓 함수 오류 출력
void err_display(char *msg)
{
lpvoid lpmsgbuf;
formatmessage(
format_message_allocate_buffer|
format_message_from_system,
null, wsagetlasterror(),
makelangid(lang_neutral, sublang_default),
(lptstr)&lpmsgbuf, 0, null);
printf([%s] %s, msg, (lpctstr)lpmsgbuf);
localfree(lpmsgbuf);
}
int main()
{
int retval;
char bufa[256];
gets(bufa);
//fflush(stdin);
// 윈속 초기화
wsadata wsa;
if(wsastartup(makeword(2,2), &wsa) != 0)
return -1;
// socket()
socket sock = socket(af_inet, sock_stream, 0);
if(sock == invalid_socket) err_quit(socket());
// connect()
sockaddr_in serveraddr;
zeromemory(&serveraddr, sizeof(serveraddr));
serveraddr.sin_family = af_inet;
serveraddr.sin_port = htons(9000);
serveraddr.sin_addr.s_addr = inet_addr(127.0.0.1);
retval = connect(sock, (sockaddr *)&serveraddr, sizeof(serveraddr));
if(retval == socket_error) err_quit(connect());
// 파일 열기
file *fp = fopen(bufa, rb);
if(fp == null){
perror(파일 입출력 오류);
return -1;
}
// 파일 이름 보내기
char filename[256];
zeromemory(filename, 256);
sprintf(filename, bufa);
retval = send(sock, filename, 256, 0);
if(retval == socket_error) err_quit(send());
// 파일 크기 얻기
fseek(fp, 0, seek_end);
int totalbytes = ftell(fp);
// 파일 크기 보내기
retval = send(sock, (char *)&totalbytes, sizeof(totalbytes), 0);
if(retval == socket_error) err_quit(send());
// 파일 데이터 전송에 사용할 변수
char buf[bufsize];
int numread;
int numtotal = 0;
// 파일 데이터 보내기
rewind(fp); // 파일 포인터를 제일 앞으로 이동
while(1){
numread = fread(buf, 1, bufsize, fp);
if(numread 0){
retval = send(sock, buf, numread, 0);
if(retval == socket_error){
err_display(send());
break;
}
numtotal += numread;
}
else if(numread == 0 && numtotal == totalbytes){
printf(파일 전송 완료!: %d 바이트\n, numtotal);
break;
}
else{
perror(파일 입출력 오류);
break;
}
}
fclose(fp);
// closesocket()
closesocket(sock);
getchar();
// 윈속 종료
wsacleanup();
return 0;
}
-
애기
네 고맙습니다 ㅠ
-
펴라
아무래도 파일위치 에러가 맞는듯 한데요 ^^ 일단 파일경로를 절대값으로 처리해보시면 결과가 나오겠네요 *^^* 그리고 백슬래시 표시할땐 \\\\ 이렇게 두번하는거 아시죠? 한번 해부세요 ^^
-
큰길
다시보니 질문이 이상하네요 에러없이 컴파일은되고 실행도 되는데요, 문제가 fopen 함수가 자꾸 눌값을 리턴해요 그래서 에러메시지인 입출력에러가 자꾸나네요. 디버그모드일때만 에러가나고 생성된 실행파일로 하면 잘되구요.. 전송원하는 파일은 디버그폴더 프로젝트폴더 모두 넣어놧거든요.. 도저히 원인을 모르겟어여
-
갅지돋는슬아
실행파일의 위치가 d:\\exam\\debug\\xxx.txt 라고 가정했을때..
상대경로는 ./xxx.txt (윈도우에선 xxx.txt 라고 쓰죠)
절대경로는 d:\\exam\\debug\\xxx.txt
질문을 다시 읽어보니... 컴파일 했을때 실행파일이 정상적으로 생성이 된다는 말씀인듯한데..
좀 이상하군요...
에러코드를 복사해서 붙여봐 주세요~ -
너에게
아그리구 절대 경로가 뭔가요?
-
한별
빌드만해서 릴리즈폴더는 생성되지 않았어요. 저도 경로가 문제인거닽아서 해당 bmp파일을 죄다 복사했는데도 디버그 모드에선 입출력 오류가 나네요 ㅠ 후미..고맙습니당
-
바르고
소스는 분석하지 않고 질문만 보고 댓글 다는점 양해 부탁드릴께요..
말씀을 들어보니... 경로 문제인듯 합니다.
파일을 디버그 디렉토리랑 릴리즈 디렉토리에 모두 동일하게 복사해 두시든지...
절대경로를 사용하세요~
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
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 |
2691592 | 동적할당 이용 배열선언 질문입니다.ㅠㅠ (3) | 허리달 | 2025-04-15 |
2691542 | /=의 용도를 알려주세요 ㅠㅠ! (2) | 아라 | 2025-04-14 |