2014-11-12 4 views
0

문자열 버퍼의 charachters를 보내고받는 프로그램을 작성하고 있습니다. 다음 코드는 포인터를 사용하여 버퍼를 인쇄합니다. 나는소켓 프로그래밍을 사용하여 String 버퍼의 세 요소를 보내고 받으십시오.

//Write a simple echo server 

#include <stdio.h> 
#include <stdlib.h>  
#include <string.h> 
#include <string> 
#include <sys/types.h> 
#include <sys/socket.h> 
#include <netinet/in.h> 
#include <arpa/inet.h> 
#include <arpa/telnet.h> 
#include <unistd.h> 
using namespace std; 

string buff1[]= {"0xff , 0xfd, 0x18,0xff,0xfd,0x23","0xff , 0xfd, 0x1e","0xff , 0xfd, 0x1d","0xff ,0xfd,0x17"}; 

int main() 
{ 
    int sockfd , newsockfd , portno; 
    socklen_t clilen; 
    char buffer[256]; 
    struct sockaddr_in serv_addr, cli_addr; 
    int n; 
    printf("\n=====================================================\nServer Side\n=====================================================\n"); 
    while(buff1[count].length()>0) 
    { 
    const unsigned char *ptr = (const unsigned char*)buff1[count].c_str(); 
    printf("Server Sending message %d of size:%d",count,buff1[count].length()); 
    for(int i = 0 ; i < buff1[count].length(); i++) 
    { 
     printf("%c",*ptr); 
     ptr++; 
    } 
     printf("\n"); 
     count++; 
    } 
     return(0); 
} 

OUTPUT을 (따라서 보내 사용, 이것은 TCP 연결입니다) 소켓 프로그래밍 기능 전송을 사용하여 3 지시가 FF로 시작 때마다 즉, 한 번에 이러한 요소 (3)를 보내는 기능을 추가 할 :

debian:~/sam$ ./single_sample 

===================================================== 
Server Side 
===================================================== 
Server Sending message 0 size32 :0xff , 0xfd, 0x18,0xff,0xfd,0x23 
Server Sending message 1 size17 :0xff , 0xfd, 0x1e 
Server Sending message 2 size17 :0xff , 0xfd, 0x1d 
Server Sending message 3 size18 :0xff , 0xfd , 0x17 
Segmentation fault 

나는 다음과 같은 의심했다 : ㄱ) 출력은 세그먼트 오류를 ​​보여주고있다? b) 각 메시지 즉 3 개 요소를 전송하기위한 전송() 메소드를 삽입 여기서 미리

Send 1 : 0xff,0xfd,0x18 
Send 2 : 0xff,0xfd,0x23 

감사

답변

0

루프 4의 길이를 갖는 buff1 어레이의 끝을지나 가고 따라서 count을 0에서 3으로 반복해야합니다. while 루프 대신 for 루프를 사용하고 count이 배열 길이의 끝에 도달하면 중지되는지 확인하는 조건을 설정하는 것이 좋습니다. 그렇지 않으면 루프가 count=4에 도달하여 buff1[count].length()에 액세스하려고하면 오류가 발생합니다.

const int buff_len = 4; 
for (int count=0; count < buff_len; count++) 
{ 
    const unsigned char *ptr = (const unsigned char*)buff1[count].c_str(); 
    printf("Server Sending message %d of size:%d",count,buff1[count].length()); 
    for(int i = 0 ; i < buff1[count].length(); i++) 
    { 
     printf("%c",*ptr); 
     ptr++; 
    } 
    printf("\n"); 
} 
+0

버퍼 길이를 하드 코딩하지 않으려면 어떻게해야합니까? – Jonsnow29

+0

그러면 수동으로 문자열 벡터를 채워야합니다. 하나의 방법은 buff1에 문자열의 벡터를'std :: vector buff1'으로 사용하는 것입니다. 그리고 루프의 최상위 값을 for (count = 0; count MasterHD

관련 문제