0
您好,我的代碼在這裏有一個小問題。我有一個默認的UDP服務器程序,它將字符數組初始化爲大小30.爲UDP打印的奇怪字符
使用字符數組將消息從UDP客戶端程序傳遞到UDP服務器程序。當我嘗試將它轉換爲一個字符串時,它會繼續打印出這些奇怪的字符。任何建議如何擺脫他們?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winsock2.h>
#include <iostream>
#include <sstream>
#include <string>
#include <stack>
#include <vector>
using namespace std;
//function declarations
void Convert(const string & Infix, string & Postfix);
bool IsOperand(char ch);
bool TakesPrecedence(char OperatorA, char OperatorB);
/*My functions I've added*/
string Change_me(string);
string Insert_comma(string);
bool Check_valid(string);
double Eval(string[]);
void Next(string);
#define BUFSIZE 30
void ErrorHandling(char *message);
int main(int argc, char **argv)
{
WSADATA wsaData;
SOCKET hServSock;
char message[BUFSIZE];
int strLen;
SOCKADDR_IN servAddr;
SOCKADDR_IN clntAddr;
int clntAddrSize;
if(argc!=2){
printf("Usage : %s <port>\n", argv[0]);
exit(1);
}
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(argv[1]));
if(bind(hServSock, (SOCKADDR*) &servAddr, sizeof(servAddr))==SOCKET_ERROR)
ErrorHandling("bind() error");
while(1) {
string Postfix;
clntAddrSize=sizeof(clntAddr);
strLen = recvfrom(hServSock, message, BUFSIZE, 0, (SOCKADDR*)&clntAddr, &clntAddrSize);
//need help here how to convert char to the string
string Infix;// test ="(99*100+200)-10";
char*result;
result=message;
Infix=result;
printf("Test2 %s\n",message);// gibberish printed
消息是否以'\ 0'結尾? –
您是否檢查過'recvfrom'的結果以確保它確實成功? –
另外,您確定該消息實際上是可以用printf()語句打印的plaintex嗎?即使它是無意義的,你所得到的一個小例子也許會有所幫助。 –