|
그럼 이것을 해결할수 있는 방법은 머가 있을까요??
nansama 님이 쓰신 글 :
: MTU (Maximum transmission unit, the size of the largest packet that a network protocol can transmit)
: 때문이지 않을까 생각 합니다.
: 네트웍상에서 최고 큰 패킷의 길이가 보통은 Ethernet 에서 1500으로 설정 되어 있는데
: 제어용 바이트가 추가 되므로 실제 최고 송수신 가능한 크기는 1500보다 몇바이트 작을겁니다.
: 단, 이건 가장 큰 패킷의 사이즈를 정한것이지 반드시 상대방이 1400바이트를 보냈다고 해서 내가 1400 바이트를
: 한번에 수신한다는 보장은 없습니다. 1400 보냈어도 LAN 상의 통신 환경에 따라 700+700 으로 두번 받아야
: 할 경우도 있습니다.
:
: 아무리생각해도.. 님이 쓰신 글 :
: : 서버와 클라인트 간에 통신을 하는 프로그램을 만드는데요..
: :
: : 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);
: : }
|