[완료]윈도우와 유닉스 간에 소켓 통신 질문
안녕하세요
유닉스와 윈도우간 소켓 통신을 구현하고 있는 초급자입니다.
현재 유닉스(서버) 윈도우(클라이언) 인디언 문제가 생각이 되어
데이터를 주고 받을때 char[]로 주고 받습니다.
일반 에코서버를 구현했을때 메세지전송을 함수로 만들었습니다. 먼저 제가 보낼 바이트수를 char[]로 변환해서 전송하고 받는측은 그걸 int로 변환한후
사전에 보낸 바이트수가 들어올때 까지 대기하는거죠(내용은 표1)
그런데 일반적인 문자를 입력받아서 서버에 전송 받는건 아무런 문제가 없었습니다.
문제는 openssl의 aes를 사용해서 메세지를 암호화해서 전송을 했을때 문제가 되는거죠
암호화해서 전송을 하면 복호화가 안되는거 같습니다.
에러는
evp_enc.c(282): OpenSSL internal error, assertion failed: int > 0 Aborted
라고 나오네요
무슨에러일까요...전송이 잘못되고 있는것인가... 휴 도움부탁드립니다.
===============================
표1
===============================
int
send_to(int clnt_sock, int parityInt, char *totalbuf)
{
int str_len =0;
int str_len2 = 0;
char parityChar[4];
memset(parityChar,0x00,sizeof(parityChar));
sprintf(parityChar,"%d",parityInt);
while(sizeof(parityChar) > str_len2)
{
str_len = send(clnt_sock, parityChar, sizeof(parityChar)-str_len2, 0);
str_len2 += str_len;
}
str_len2 =0;
str_len =0;
while(parityInt> str_len2)
{
str_len = send(clnt_sock, totalbuf, parityInt- str_len2, 0);
str_len2 += str_len;
}
return 0;
}
//extern "C" _declspec(dllexport)
int
recv_from(int clnt_sock, int *parityInt, char *totalbuf)
{
int str_len=0;
int str_len2=0;
char parityChar[4];
*parityInt =0;
memset(parityChar,0x00,sizeof(parityChar));
while(sizeof(parityChar) > str_len2)
{
str_len = recv(clnt_sock, parityChar, sizeof(parityChar) - str_len2, 0);
if(str_len == 0) return 1;
str_len2 += str_len;
}
*parityInt = atoi(parityChar);
str_len2 =0;
str_len =0;
while(*parityInt > str_len2)
{
str_len = recv(clnt_sock,totalbuf, *parityInt - str_len2, 0);
if(str_len == 0) return 1;
str_len2 += str_len;
}
return 0;
}
댓글 달기