안녕하세요 TCP/IP를 이용하여 통신을 하고 있는데요.

Client -> Server로 1K + 24byte의 Size의 Data송신하면 정상적으로 동작을 합니다.

그렇지만

Client -> Server로 32K + 24byte의 Size의 Data송신하면 4K정도는 들어오는데 나머지 Data들이 들어오지를 않습니다.

 

read(), write()를 이용하여 송수신을 하고 있는데요.

client에서 write()에서 32K +24byte의 Data를 송신하는것은 확인을 했는데.

server에서 read()를 할때 Data가 전부 들어오지가 않는 군요.

read()의 return값을 보니 32K+24byte가 되어야 할것 같은데요. 이게 4K정도 밖에 되질 않습니다.

 

recv(), send()의 flag를 0으로 설정하고 해보니 현상은 비슷하구요.ㅡㅡ;

32K 나 64K Data를 송수신 할수 있는 방법이 없는 건가요.?

 

server Code.......

	printf("Bind ...");
	if(-1 == bind(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr))) {
		printf("	Bind Fail...!\n");
		return 1;
	}
	printf("OK!\n");
 
	printf("listen...");
	if(listen(sockfd, 5) == -1) {
		printf(" Fail...!\n");
		return 1;
	}
	printf("OK!\n");
 
	printf("Accept...");
	cli_sockfd = accept(sockfd, (struct sockaddr*)&client_addr, &client_addr_size); 
	if(cli_sockfd == -1) {
		printf(" Fail...!\n");
		return 1;
	}
	printf("OK!\n");
 
 
buf_size = sizeof(ret_buf);
rn = sizeof(int);
 
//if(setsockopt(sockfd, SOL_SOCKET, SO_RCVBUF, &buf_size, (socklen_t)rn) == -1) {
//	printf("Set Socket Option Fail....\n");
//}
 
if(getsockopt(sockfd, SOL_SOCKET, SO_RCVBUF, &buf_size, (socklen_t*)&rn) == -1) {
	printf("Get Socket Option Fail...\n");
}
 
printf("Socket Buffer size [%d]\n", buf_size);
 
	while(1) {
 
		printf("Recevied Data Wait...");
		ret = read(cli_sockfd, (void*)ret_buf, sizeof(ret_buf));
		if(ret < 0) {
			printf("Recevied Fail !\n");
		}
		else {
			printf("Recevied Completei[%d]!\n", ret);
 
			data_size = *(int*)(&ret_buf[4]);	//stx + +  next Data Area
			tx_pac_size = data_size + sizeof(tx_data_t) + 16;	//+ 4;
			rx_pac_size = data_size + sizeof(rx_data_t) + 16;	//+ 4;
 
			raw_data = malloc(tx_pac_size);
			ret_data = malloc(rx_pac_size);
 
			memcpy(raw_data, ret_buf, tx_pac_size);
 
			if((raw_data->stx == fstx) && (*(int*)(&raw_data->data[raw_data->datalen + 12]) == fetx)) {
				ret_data->stx = fstx;
				memcpy(ret_data->ret_data, raw_data->data, raw_data->datalen);
 
				printf("Send Data Wait...");
				ret = write(cli_sockfd, (void*)ret_data, rx_pac_size);
				if(ret < 0) {
					printf("Send Fail !\n");
					break;
				}
				else {
					printf("Send Complete !\n");
				}
			}
 		}
        }