정말 도저히 원인을 모르겠습니다.
불꾼
질문 제목 : 디버그모드로 파일전송프로그램을 실행했을떄와 직접 프로그램을 실행시켜서 전송 프로그램을 실행했을떄파일전송하는 프로그램 에 관해서 디버그 모드로 실행하면 파일입출력 오류가 나고, 실행파일을 직접 실행시켜서 동작시키면 전송이 아주 잘됩니다. 도대체 왜 차이가 나는지 모르겠어요 이것떄문에 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파일을 죄다 복사했는데도 디버그 모드에선 입출력 오류가 나네요 ㅠ 후미..고맙습니당
-
바르고
소스는 분석하지 않고 질문만 보고 댓글 다는점 양해 부탁드릴께요..
말씀을 들어보니... 경로 문제인듯 합니다.
파일을 디버그 디렉토리랑 릴리즈 디렉토리에 모두 동일하게 복사해 두시든지...
절대경로를 사용하세요~
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2676182 | 숫자 순서대로 배열하는법 | 권뉴 | 2024-11-24 |
2676152 | 기본적인거 하나 질문드립니다. | 개미 | 2024-11-24 |
2676124 | 함수선언관련 질문이에요~...털썩..수정완료 (2) | 가지 | 2024-11-24 |
2676092 | C언어 책 (2) | 아서 | 2024-11-24 |
2676065 | 웹사이트 또는 메신저 등에서 원하는 텍스트를 검사하는방법?? (1) | 모든 | 2024-11-23 |
2676033 | 배열 기초연습중 발생하는 에러 ㅠㅜ... | Creative | 2024-11-23 |
2676005 | keybd_event 게임 제어 | 영글 | 2024-11-23 |
2675900 | 진짜기본적인질문 | 글길 | 2024-11-22 |
2675845 | 수정좀해주세요ㅠㅠㅠ | 해골 | 2024-11-21 |
2675797 | 병합 정렬 소스 코드 질문입니다. (2) | 도래솔 | 2024-11-21 |
2675771 | 큐의 활용이 정확히 어떻게 되죠?? | 해긴 | 2024-11-21 |
2675745 | 도서관리 프로그램 질문이요 | 도리도리 | 2024-11-20 |
2675717 | 2진수로 변환하는것! (3) | 동생몬 | 2024-11-20 |
2675599 | for문 짝수 출력하는 법 (5) | 널위해 | 2024-11-19 |
2675575 | Linux 게시판이 없어서.. | 첫삥 | 2024-11-19 |
2675545 | 구조체 이용할 때 함수에 자료 넘겨주는 것은 어떻게 해야 하나요? | 아연 | 2024-11-19 |
2675518 | 사각형 가로로 어떻게 반복해서 만드는지좀.. 내용 | 신당 | 2024-11-18 |
2675491 | !느낌표를 입력하는것은 어떻게합니까~~?ㅠㅠ (5) | 사지타리우스 | 2024-11-18 |
2675411 | 파일입출력으로 받아온 파일의 중복문자열을 제거한 뒤 파일출력 | 앨버트 | 2024-11-17 |
2675385 | 링크드리스트 주소록 질문드립니다. (1) | 겨루 | 2024-11-17 |