채팅서버 질문입니다!!
채팅서버를 게임클라이언트에 붙이고 있습니다.
현재 서버랑 클라이언트 자체로는 자료가 오가고 있고요 +_+
근데 이걸 클라이언트에 옮기는 중에
지금은 그냥 클라이언트는 연결 요청 할 때 IP와 PORT번호를 직접 입력하지만
게임상에서는 제가 알아서 지정해 줘야 하잖아요 ㅠㅠㅠ
근데 지금 그 방법을 모르겠어서
IP는 define으로 지정해 줬는데
PORT는 같은방법으로 했더니 char형이 아니라 int형이라고 안된다고 하네요 ㅠㅠㅠ
고수님들 부탁드립니다 ㅠㅠㅠㅠㅠㅠ
#include "_StdAfx.h"
#include
#include
#include
#include
#define BUF_SIZE 1024
#define Person 4
void ErrorHandling(char *message);
int main(int argc, char *argv[])
{
WSADATA wsaData;
SOCKET hServSock, hClntSock;
SOCKADDR_IN servAdr, clntAdr;
TIMEVAL timeout;
fd_set reads, cpyReads;
int adrSz;
int strLen, fdNum,i,j,k,l,e;
char buf[BUF_SIZE];
SOCKET List[Person]={0,0,0,0};
if(argc!=2){
printf("Usage:%s
exit(1);
}
if(WSAStartup(MAKEWORD(2,2), &wsaData)!=0)
ErrorHandling("WSAStartup() error!");
hServSock=socket(PF_INET, SOCK_STREAM, 0);
memset(&servAdr, 0, sizeof(servAdr));
servAdr.sin_family=AF_INET;
servAdr.sin_addr.s_addr=htonl(INADDR_ANY);
servAdr.sin_port=htons(atoi(argv[1]));
if(bind(hServSock, (SOCKADDR*) &servAdr, sizeof(servAdr))==SOCKET_ERROR)
ErrorHandling("bind() error");
if(listen(hServSock, 5) == SOCKET_ERROR)
ErrorHandling("listen() error");
FD_ZERO(&reads);
FD_SET(hServSock, &reads);
while(1)
{
cpyReads=reads;
timeout.tv_sec=5;
timeout.tv_usec=5000;
if((fdNum=select(0, &cpyReads, 0 ,0, &timeout))==SOCKET_ERROR)
break;
if(fdNum==0)
continue;
for(i=0; i
if(FD_ISSET(reads.fd_array[i], &cpyReads))
{
if(reads.fd_array[i]==hServSock)
{
for(j=0; j
}
adrSz=sizeof(clntAdr);
hClntSock = accept(hServSock, (SOCKADDR*)&clntAdr, &adrSz);
FD_SET(hClntSock, &reads);
printf("Connectd client : %d \n", hClntSock);
e=0; if(List[e] ==0) for(l=0; l } closesocket(hServSock); void ErrorHandling(char *message) #define CLNT_IP_ADDRESS "127.0.0.1" void ErrorHandling(char *message); CSceneLobby::CSceneLobby(void) if(argc!=3) if(WSAStartup(MAKEWORD(2,2), &wsaData)!=0) hSocket=socket(PF_INET, SOCK_STREAM, 0); memset(&servAdr, 0, sizeof(servAdr)); if(connect(hSocket, (SOCKADDR*)&servAdr, sizeof(servAdr))==SOCKET_ERROR) else while(1) if(!strcmp(message, "q\n") || !strcmp(message,"Q\n")) send(hSocket, message, strlen(message), 0); } closesocket(hSocket); }
while(e
{
List[e] = hClntSock;
}
else
{
e++;
continue;
}
break;
}
}
else
{
strLen=recv(reads.fd_array[i], buf,BUF_SIZE-1, 0);
if(strLen==0)
{
FD_CLR(reads.fd_array[i], &reads);
closesocket(cpyReads.fd_array[i]);
printf("closed clnet: %d \n", cpyReads.fd_array[i]);
}
else
{
for(k=0; k
send(List[k], buf, strLen, 0);
}
}
}
}
}
}
WSACleanup();
return 0;
}
{
fputs(message, stderr);
fputc('\n', stderr);
exit(1);
}
//#define CLNT_PORT "9000"
{
Network(CLNT_IP_ADDRESS);
}
void CSceneLobby::Network(int argc, char *argv[])
{
WSADATA wsaData;
SOCKET hSocket;
char message[BUF_SIZE];
int strLen;
SOCKADDR_IN servAdr;
int i;
{
printf("Usage: %s
exit(1);
}
ErrorHandling("WSAStartup() error!");
if(hSocket==INVALID_SOCKET)
ErrorHandling("socket() error");
servAdr.sin_family=AF_INET;
servAdr.sin_addr.s_addr=inet_addr(argv[1]);
servAdr.sin_port=htons(atoi(argv[2]));
ErrorHandling("connect() error!");
puts("Connected.......");
{
fputs("Input message(Q to quit):", stdout);
fgets(message, BUF_SIZE, stdin);
break;
strLen=recv(hSocket, message, BUF_SIZE-1, 0);
message[strLen] = 0;
printf("Message form server: %s", message);
WSACleanup();
댓글 달기