ServSendController.cpp
//===========================================================
#include "stdafx.h"
#include "ServSendController.h"
#include <stdio.h>
#include <stdlib.h>
#include <mmsystem.h>
PLAYER player_self, player_2;
int isThread;
WSADATA wsa;
SOCKET sock;
SOCKADDR_IN serveraddr;
void StartWinSock();
int recvn(SOCKET s, char *buf, int len, int flags);
void sendToServer(char *message); //서버에 메세지전송
int my_strcmp(const char*, const char *);
int my_strncmp(const char *, const char *, size_t);
void err_quit(char *msg);
void err_display(char *msg);
void ErrorHandling(LPCSTR message);
//void StartWinSock();
DWORD WINAPI ThreadFunction(void *arg);
/*
void Position_Receiver()
{
float tPositionX=0,tPositionY=0;
// tPositionX=FaceController.player_self.ptx;
// tPositionY=FaceController.player_self.pty;
player_self.ptx = tPositionX;
player_self.pty = tPositionY;
printf("ptx : %f pty : %f",player_self.ptx,player_self.pty);
}
*/
/*ServSendController::~ServSendController()
{
// AllocConsole();
// freopen("CONOUT$","w",stdout);
}
*/
/*
//char title_str[100]; //자기자신의 정보
//char title_str2[100]; // 상대편의 정보
int recvn(SOCKET s, char *buf, int len, int flags);
void sendToServer(char *message); //서버에 메세지전송
int my_strcmp(const char*, const char *);
int my_strncmp(const char *, const char *, size_t);
int isThread;
void err_quit(char *msg);
void err_display(char *msg);
void ErrorHandling(LPCSTR message);
//PLAYER player_self, player_2;
//DWORD WINAPI ThreadFunction(void *arg);
*/
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);
}
/*
*/
//void StartWinSock()
void StartWinSock()
{
int retval;
// 윈속 초기화
//WSADATA wsa;
if(WSAStartup(MAKEWORD(2,2), &wsa) != 0)
printf(" Break!!!!!!\n");
// return -1;
// 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("210.107.236.99");
retval = connect(sock, (SOCKADDR *)&serveraddr, sizeof(serveraddr));
if(retval == SOCKET_ERROR) ErrorHandling("connect() error!");
// 데이터 통신에 사용할 변수
//sendToServer("서버 접속!!\0");//서버로 메세지전송
//#######################################################################START
//쓰레드생성
if(isThread==0){
HANDLE hThread=0;
DWORD dwThreadID;
DWORD dw;
hThread = CreateThread(NULL, 0, ThreadFunction, NULL, 0, 0);
if(hThread == 0){
exit(1);
}
}
}
void ErrorHandling(LPCSTR message)
{
fputs(message, stderr);
fputc('\n', stderr);
exit(1);
}
// 사용자 정의 데이터 수신 함수
int recvn(SOCKET s, char *buf, int len, int flags)
{
int received;
char *ptr = buf;
int left = len;
while(left > 0){
received = recv(s, ptr, left, flags);
if(received == SOCKET_ERROR)
return SOCKET_ERROR;
else if(received == 0)
break;
left -= received;
ptr += received;
}
return (len - left);
}
int my_strcmp(const char *s1, const char *s2)
{
unsigned char *ps1, *ps2;
ps1 = (unsigned char *)s1;
ps2 = (unsigned char *)s2;
for(;;)
{
if( (*ps1) != (*ps2))
{
if( (*ps1) > (*ps2) )
{
return 1;
}
else
{
return -1;
}
}
if( (*ps1) == 0)
{
return 0;
}
*ps1++;
*ps2++;
}
}
void sendToServer(char *message)
{
char mesg[100];
ZeroMemory(mesg, sizeof(mesg));
strcpy(mesg, message);
send(sock, mesg, strlen(mesg), 0); //메세지전송
}
int my_strncmp(const char *s1, const char *s2, size_t n)
{
unsigned char *ps1, *ps2;
int i;
ps1 = (unsigned char *)s1;
ps2 = (unsigned char *)s2;
for(i = 0 ; i<=n ; i++)
{
if( (*ps1) != (*ps2) )
{
if( (*ps1) > (*ps2) )
{
return 1;
}
else
{
return -1;
}
}
if( (*ps1) == 0)
{
return 0;
}
*ps1++;
*ps2++;
}
return 0;
}
DWORD WINAPI ThreadFunction(void *arg) //쓰레드 함수
{ // 상대방 정보수신
// int testcount=0; //Check recv
isThread=1;//쓰레드가 존재한다는 표시
int retval=0;
while(1){
Sleep(200);
retval = recv(sock,(char*)&player_2, sizeof(PLAYER), 0);
// if(retval == 0 )
// strcpy(cTempArray,"종료");
// testcount++;
// printf("%d",testcount);
}
return 0;
}
//#########################################################################END
/*
void title(char *message)
{
printf("%s\n", message);
//SetWindowText(hWnd, message);//테스트
}
*/
//===========================================================
ServSendController.h
//===========================================================
#ifndef SERVSENDCONTROLLER_H
#define SERVSENDCONTROLLER_H
#include <windef.h>
#include <winnt.h>
#include <winbase.h>
#include <wingdi.h>
#include <winsock2.h>
struct PLAYER{
float ptx;
float pty;
float pbx;
float pby;
float pbz;
float psx;
float psy;
float psz;
int count;
int nID;
};
extern PLAYER player_self, player_2;
extern int isThread;
extern WSADATA wsa;
extern SOCKET sock;
extern SOCKADDR_IN serveraddr;
void StartWinSock();
#endif
//===========================================================