|
서버와 클라인트 간에 통신을 하는 프로그램을 만드는데요..
1450바이트 이하를 한번에는 보내지고 왔다갔다 통신을 잘하는데요.
1500바이트는 왔다갔다 하지 못하네요..
이유가 먼지 해결좀 해주세요..ㅠ
[/code] Client
#define BUFSIZE 1455
short Client(int argc, char **argv)
{
WSADATA wsaData;
SOCKET hSocket;
char message[BUFSIZE];
char cancel[16];
char cancel1[16];
char message1[BUFSIZE],cDummyBuf[16];
int iLen =0,nResult, iLen1 =0;
SOCKADDR_IN dummyAddr;
int dummyLength,buff_len;
int addrLength;
SOCKADDR_IN servAddr;
if(WSAStartup(MAKEWORD(2, 2), &wsaData) != 0){
ErrorHandling("WSAStartup() error!");
return RTN_TRUE;
}
hSocket=socket(PF_INET, SOCK_DGRAM, 0);
if(hSocket == INVALID_SOCKET){
ErrorHandling("socket() error");
return RTN_TRUE;
}
memset(&servAddr, 0, sizeof(servAddr));
servAddr.sin_family=AF_INET;
memset(cDummyBuf, CH_NULL,sizeof(cDummyBuf));
ScreenAllSet(" *TCP/IP접속IP* ",
CH_NULL,
CH_NULL,
" [.]SP = '.' ", TRUE);
nResult = InputStyleNum(2, 0, (uchar *)". ",
StrLen(15, (uchar*)cDummyBuf),
15, (uchar *)cDummyBuf, 30);
if(nResult < RTN_FALSE)
return RTN_TRUE;
servAddr.sin_addr.s_addr=inet_addr((const char*)cDummyBuf);
servAddr.sin_port=htons(atoi((char*)"9002"));
memset(cancel1,CH_NULL,sizeof(cancel1));
memset(cancel,CH_NULL,sizeof(cancel));
ScreenAllSet((char*)"Client Test", CH_NULL, CH_NULL, CH_NULL, 1);
while(1)
{
memset(message,CH_0,sizeof(message));
addrLength = sizeof(servAddr);
sendto(hSocket, message, strlen(message), 0, (SOCKADDR*)&servAddr, addrLength);
dummyLength = sizeof(dummyAddr);
buff_len = recvfrom(hSocket, message1, sizeof(message1), 0, (SOCKADDR*)&dummyAddr, &dummyLength);
message1[buff_len]=0;
if(memcmp(message, message1, sizeof(message1))){
sprintf(cancel,"Cancel = %d",iLen);
ScreenAllSet((char*)"Cancel", cancel, message, message1, 1);
Wait(500, WAIT_TIMER);
iLen++;
continue;
}
if(!message1) {
sprintf(cancel1,"NULL = %d",iLen1);
ScreenAllSet((char*)"NULL", CH_NULL, cancel, cancel1, 1);
Wait(500, WAIT_TIMER);
iLen1++;
continue;
}
if(KeyRead() == K_CANCEL){
ScreenAllSet((char*)"Result", CH_NULL, cancel, cancel1, 1);
WaitChar(0, WAIT_KEY | WAIT_TIMER, K_ENTER);
return RTN_CANCEL;
}
}
closesocket(hSocket);
WSACleanup();
return -1;
}
[code] server
int Server(int argc, char **argv)
{
WSADATA wsaData;
SOCKET hServSock;
char message[BUFSIZE];
int strLen;
SOCKADDR_IN servAddr;
SOCKADDR_IN clntAddr;
int clntAddrSize;
if(argc!=2){
ErrorHandling("Port error!");
}
if(WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
ErrorHandling("WSAStartup() error!");
hServSock=socket(PF_INET, SOCK_DGRAM, 0);
if(hServSock == INVALID_SOCKET)
ErrorHandling("socket() error!");
memset(&servAddr, 0, sizeof(servAddr));
servAddr.sin_family=AF_INET;
servAddr.sin_addr.s_addr=htonl(INADDR_ANY);
servAddr.sin_port=htons(atoi((char*)"9002"));
if(bind(hServSock, (SOCKADDR*) &servAddr, sizeof(servAddr))==SOCKET_ERROR)
ErrorHandling("bind() error");
ScreenAllSet((char*)"Server Test", CH_NULL, CH_NULL, CH_NULL, 1);
while(1) {
clntAddrSize=sizeof(clntAddr);
strLen = recvfrom(hServSock, message, BUFSIZE, 0, (SOCKADDR*)&clntAddr, &clntAddrSize);
message[strLen]=0;
sendto(hServSock, message, strLen, 0, (SOCKADDR*)&clntAddr, sizeof(clntAddr));
}
closesocket(hServSock);
WSACleanup();
return -1;
}
void ErrorHandling(char *message)
{
ScreenAllSet((char*)"error", CH_NULL, message, CH_NULL, 1);
exit(1);
}
|