2011-05-09 64 views
2

我想用UDP發送文本,通過分別發送每個字符,但有些東西似乎是錯誤的。 這是客戶:用UDP發送字符

while(strcmp(sir,"0")!=0) 
{ 
    printf("Text number %d:", i); 
    i++; 
    scanf("%s",sir); 
    printf("\n"); 
    sirLen=strlen(sir); 
    for(j=0;j<sirLen;j++) 
    {  c=sir[j]; 
      printf("%c",c); 
      sendto(sock, &c, sizeof(char), 0, (struct sockaddr *)&ServAddr, sizeof(ServAddr)); 
    } 
} 

raspunsLen=recvfrom(sock, raspuns, SIRMAX, 0,(struct sockaddr *) &fromAddr, &fromSize); 
raspuns[raspunsLen] = '\0'; 
printf("%s",raspuns); 

,這將是服務器:

for (;;) 
{ 
    cliAddrLen = sizeof(ClntAddr); 
    while(sir != '0') 
    { 
     recvfrom(sock, &sir, sizeof(char), 0,(struct sockaddr *) &ClntAddr, &cliAddrLen); 
     raspuns[i]=sir; 
     printf("%c",sir); 
    } 
    raspunsMsgSize=strlen(raspuns); 
    sendto(sock, raspuns, raspunsMsgSize, 0, (struct sockaddr *) &ClntAddr,    sizeof(ClntAddr)); 
} 

它工作時,我發短信,但這樣的服務器似乎並沒有被接受任何的整件。希望有人能幫忙。 謝謝。

+1

你的代碼最後需要'0',但我沒有看到你發送它 - 除非它是用戶輸入的字符串的一部分。實際上,你可能意味着0,如「所有位的字節清楚「,但你也不會發送。嘗試輸入,例如「CS 101」作爲輸入字符串。 – Arkadiy 2011-05-09 19:24:07

+0

什麼是在服務器部分的'sir'聲明? – 2011-05-09 19:28:37

+0

一個簡單的建議,從不使用UDP發送機制,在這個機制中你有個別字符要發送到一個包中。因爲UDP不是一個可靠的協議,你永遠不會知道什麼是什麼。如果是這種情況,你必須使用tcp協議。 – maheshgupta024 2011-05-09 19:17:05

回答

1

我懷疑:

while(sir != '0') 

應該是:

while(sir != 0) 

或可能:

while(* sir != 0) 

不過說真的,你有沒有足夠的發佈代碼以確保萬無一失。

+0

我覺得它不是*先生,這是一個正常的變量,你看他在其他調用中也使用了先生變量的地址。根據我的觀點,這是因爲udp協議不可靠。 – maheshgupta024 2011-05-09 19:18:30

+0

我很抱歉沒有發佈整個代碼。它會佔用很多空間。正如我所說的,該程序適用於發送字符串,但不適用於字符。也許我會堅持發送字符串。 – Vidi 2011-05-09 19:57:52