我正在寫一個服務器客戶端聊天程序在Linux中。由於某些原因,代碼無法正常工作。服務器客戶端程序未定義的行爲
的問題是在客戶端代碼,while循環中,連續服用輸入編譯器doesn't wait at scanf
,而是sends some garbage data itself to the server
,作爲回報,服務器還發送一些數據和client program terminates
。
由於我的知識有限,我無法弄清楚問題所在,您的幫助將不勝感激。
Server.c
#define PORT 3690
#define MaxBufferLength 1024
int main()
{
int sockFd, bytesRead, bytesSent;
char buffer[MaxBufferLength];
struct sockaddr_in server, client;
server.sin_port= htons(PORT);
server.sin_family = AF_INET;
server.sin_addr.s_addr = htonl(INADDR_ANY);
sockFd = socket(AF_INET, SOCK_STREAM, 0);
if(sockFd == -1)
printf("Unable to open socket\n");
int i = bind(sockFd, (struct sockaddr *) &server, sizeof(struct sockaddr));
if(i == -1)
perror("Unable to bind\n");
i = listen(sockFd, 1);
if(i == -1)
printf("Unable to listen\n");
int connectionSocket = accept(sockFd, (struct sockaddr *) &client, sizeof(struct sockaddr));
if(connectionSocket == 1)
printf("connection established\n");
while(1)
{
bytesRead = recv(connectionSocket, buffer, MaxBufferLength, 0);
buffer[bytesRead] = '\0';
printf("Client said: \n %s\n", buffer);
scanf("\n\n = %s", buffer);
bytesSent = send(connectionSocket, buffer, strlen(buffer), 0);
if(bytesSent == -1)
perror("Failed to send a message");
connectionSocket = accept(sockFd, (struct sockaddr *) &client, sizeof(struct sockaddr)); // wait for connection again
}
close(sockFd);
return 0;
}
問候
是否該做的每一次?或僅在您的第一條消息之後? –
每次都會發生。 – Naruto
看起來您正嘗試使用scanf()將輸出(即「輸入消息:」)輸出給用戶。我不認爲這是scanf()能做的事情;你最好做一個printf(「輸入消息:」); fflush(stdout中); scanf(「%s」,緩衝區);而不是 –