=== UDP 서버
#include "stdafx.h"
#pragma comment(lib, "ws2_32.lib")
#include <winsock2.h>
#include <stdio.h>
#define PORT 65000
#define BUFMAX 255
struct dataStruct
{
int intValue;
char charValue[100];
float floatValue;
};
void ErrorMessage(char *errorMessage) /* External error handling function */
{
printf("%s\n", errorMessage);
exit(1);
}
int _tmain(int argc, _TCHAR* argv[])
{
WSADATA wsaData;
SOCKET sock;
SOCKADDR_IN echoServAddr;
SOCKADDR_IN echoClntAddr;
if (WSAStartup(MAKEWORD(2, 0), &wsaData) != 0) /* Load Winsock 2.0 DLL */
{
fprintf(stderr, "WSAStartup() failed");
exit(1);
}
/* Create socket for sending/receiving datagrams */
if ((sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0)
ErrorMessage("socket() failed");
/* Construct local address structure */
memset(&echoServAddr, 0, sizeof(echoServAddr));
echoServAddr.sin_family = AF_INET;
echoServAddr.sin_addr.s_addr = htonl(INADDR_ANY);
echoServAddr.sin_port = htons(PORT);
/* Bind to the local address */
if (bind(sock, (struct sockaddr *) &echoServAddr, sizeof(echoServAddr)) != 0)
ErrorMessage("bind() failed");
for (;;) /* Run forever */
{
char echoBuffer[BUFMAX];
int cliLen = sizeof(echoClntAddr);
int recvMsgSize = recvfrom(sock, echoBuffer, BUFMAX, 0, (struct sockaddr*) &echoClntAddr, &cliLen);
if (recvMsgSize < 0)
ErrorMessage("recvfrom() failed");
dataStruct recvData;
memcpy(&recvData, echoBuffer, sizeof(recvData));
printf("RecvData - %d, %s, %f\n", recvData.intValue, recvData.charValue, recvData.floatValue);
dataStruct sendData;
ZeroMemory(&sendData, sizeof(sendData));
sendData.intValue = 101;
sprintf(sendData.charValue, "잘받음");
sendData.floatValue = 12.11f;
char sendBuf[BUFMAX];
ZeroMemory(sendBuf, sizeof(sendBuf));
memcpy(sendBuf, &sendData, sizeof(sendData));
if (sendto(sock, sendBuf, sizeof(sendData), 0, (struct sockaddr *) &echoClntAddr, sizeof(echoClntAddr)) == 0)
{
ErrorMessage("sendto() send Error");
}
}
return 0;
}
=== php 클라이언트
<?php
class CDataClass
{
private $intValue;
private $charValue;
private $floatValue;
public function SetDataInt($int)
{
$this->intValue = $int;
}
public function &GetDataInt()
{
return $this->intValue;
}
public function SetDataChar($char)
{
$this->charValue = $char;
}
public function &GetDataChar()
{
return $this->charValue;
}
public function SetDataFloat($float)
{
$this->floatValue = $float;
}
public function &GetDataFloat()
{
return $this->floatValue;
}
public function PackData()
{
$temp = pack("i", $this->intValue);
$temp .= pack("a100", $this->charValue);
$temp .= pack("f", $this->floatValue);
return $temp;
}
public function UnpackData($value)
{
$array = unpack("iInt/a100Char/fFloat", $value);
$this->intValue = $array[Int];
$this->charValue = $array[Char];
$this->floatValue = $array[Float];
}
}
define("_IP", "127.0.0.1");
define("_PORT", "65000");
$sendData = new CDataClass();
$sendData->SetDataInt(100);
$sendData->SetDataChar("아햏햏");
$sendData->SetDataFloat(10.1);
$temp1 = $sendData->GetDataInt();
$temp2 = $sendData->GetDataChar();
$temp3 = $sendData->GetDataFloat();
echo "CLIENT >> send Data - $temp1 , $temp2 , $temp3
";
$sendbuf = $sendData->PackData();
$sendlen = strlen($sendbuf);
$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_sendto($sock, $sendbuf, $sendlen, 0, _IP, _PORT);
$from = '';
$port = 0;
$recvSize = socket_recvfrom($sock, $buf, 4096, 0, $from, $port);
$recvData = new CDataClass();
$recvData->UnpackData($buf);
$temp1 = $recvData->GetDataInt();
$temp2 = $recvData->GetDataChar();
$temp3 = $recvData->GetDataFloat();
socket_close($sock);
echo "CLIENT >> recv Data - $temp1 , $temp2 , $temp3
";
?>
RECENT COMMENT