我正在用 Linux 编写服务器客户端聊天程序。由于某种原因,代码没有按预期工作。
问题出在客户端代码中,在 while 循环内,编译器不会在 scanf 处等待
获取输入,而是自己向服务器发送一些垃圾数据
,作为返回,服务器也发送一些数据,客户端程序终止
。
由于我的知识有限,我无法找出问题所在,非常感谢您的帮助。
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;
}
问候
最佳答案
这可能会导致问题。
sizeof(struct sockaddr) ==>sizeof(struct sockaddr_in) or sizeof(server)
int connection = connect(sockFd, (struct sockaddr *) &server, sizeof(server) )
和
scanf("Enter message: \n\n = %s", buffer);
|
V
printf("Enter message: ");
scanf("%s",buffer);
关于c - 服务器客户端程序未定义行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19011130/