소켓프로그래밍 질문입니다
찬슬기
#include winsock2.h
#include stdio.h
#include stdlib.h
void ErrorDisplay(char *szError);
void ErrorPrint(char *szError);
void ErrorDisplay(char *szError)
{
LPVOID lpBuff;
FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
WSAGetLastError(), // 에러 코드를 읽어 옴
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR)&lpBuff,
0,
NULL );
MessageBox( NULL, (LPCTSTR)lpBuff, szError, MB_ICONSTOP );
LocalFree( lpBuff );
exit( 0 ); // 프로그램을 종료
}
void ErrorPrint(char *szError)
{
LPVOID lpBuff;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|
FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
WSAGetLastError(),
MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
(LPTSTR)&lpBuff,
0,
NULL);
printf(%s : %s\n,szError,lpBuff);
LocalFree(lpBuff);
}
void main()
{
int ret;
WSADATA wsa;
SOCKET s;
SOCKET c;
SOCKADDR_IN saddr;
SOCKADDR_IN caddr;
int caddrlen;
SOCKET cs;
int nSend;
ret = WSAStartup(MAKEWORD(2,2),&wsa);
if(ret != 0)
{
ErrorDisplay(WSAStartup);
}
s = socket(AF_INET,SOCK_STREAM,0);//서버소캣생성
if(s==INVALID_SOCKET)
{
ErrorDisplay(socket());
}
ZeroMemory(&saddr,sizeof(saddr));
saddr.sin_family = AF_INET; // 주소체계
saddr.sin_port = htons(5000); // 포트 번호
saddr.sin_addr.s_addr = htonl(INADDR_ANY); // 네트워크 카드 설정
ret = bind(s,(SOCKADDR *)&saddr,sizeof(saddr));//소캣에 주소할당
if(ret == SOCKET_ERROR)
{
ErrorDisplay(bind());
}
ret = listen(s,SOMAXCONN);//연결 요청 대기 상태로 진입
//printf(dddd);
if(ret == SOCKET_ERROR)
{
ErrorDisplay(listen());
}
/**********************************************************/
c = socket(AF_INET,SOCK_STREAM,0);//클라이언트 소캣생성
if(c == INVALID_SOCKET)
{
ErrorDisplay(socket());
}
saddr.sin_family = AF_INET;
saddr.sin_port = htons(5000);
saddr.sin_addr.s_addr = inet_addr(192.168.1.222);
ret = connect(c,(SOCKADDR*)&saddr,sizeof(saddr));
if(ret != 0)
{
ErrorDisplay(connect());
}
while(TRUE)
{{
char buf[1024];
//int nSend;
int nRecv;
memset( buf, 0, sizeof buf );
gets( buf );
// scanf(%s,buf); //공백 포함을 안함..!!
nSend = send(c,buf,strlen(buf),0);
if(nSend == SOCKET_ERROR)
{
ErrorPrint(send());
break;
}
nRecv = recv(c,buf,sizeof(buf),0);
if(nRecv == SOCKET_ERROR)
{
ErrorPrint(recv());
break;
}
else if(nRecv == 0)
{
printf(클라이언트와 접속이 끊어졌습니다.\n);
break;
}
else
{
printf( %d 바이트 수신 : %s \n, nRecv, buf );
}
}
closesocket( c );
WSACleanup();
/*****************************************************************/
while(TRUE)
{
caddrlen =sizeof(caddr);
cs = accept(s,(SOCKADDR*)&caddr,&caddrlen);
if(cs == INVALID_SOCKET)
{
ErrorPrint(accept());
continue;
}
printf(클라이언트 IP : %s\n,inet_ntoa(caddr.sin_addr));
printf(클라이언트 port: %d\n,ntohs(caddr.sin_port));
while(TRUE)
{
char buf[1024];
int nRecv;
memset(buf,0,sizeof(buf));
nRecv = recv(cs,buf,sizeof(buf),0);
if(nRecv == SOCKET_ERROR)
{
ErrorPrint(recv());
break;
}
else if(nRecv == 0)
{
printf(클라이언트와의 접속이 끊어졌습니다.\n);
}
else
{
//받은 데이터 출력
printf(%d 바이트 수신 :%s\n,nRecv,buf);
nSend = send(cs,buf,nRecv,0);
if(nSend == SOCKET_ERROR)
{
ErrorPrint(send());
break;
}
}
}
closesocket( cs );
}
closesocket( s );
WSACleanup();
}
채팅프로그램입니다
서버와 클라이언트부분을 합쳤는데 서버쪽이 잘안되는데 while문에서 못빠져나와는것같은데 수정좀 해주실분있나요 ??
이프로그램에서 서버와 클라이언트를 같이 실행하고싶습니다.
-
다인
전체 코드를 올리는건 좋은데, 정확히 어디 위치인지 붉은색이라도 표시해주는게 보기 편하지 않을까요?
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2692483 | C언어 함수, Header | 떠나간그놈 | 2025-04-23 |
2692451 | 이 문제좀 풀어주세요 ^^ | 게자리 | 2025-04-23 |
2692424 | 2차원배열 자료입력질문이요! (1) | 똘끼 | 2025-04-22 |
2692401 | 유닉스안에서 C언어를 이용한 명함 만들기 입니다; 이해안가는 부분이있네요 | 2gether | 2025-04-22 |
2692374 | 고수님들 댓글 마니부탁해요!!! (2) | 엄지 | 2025-04-22 |
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 |