我正在编写一个简单的客户端/服务器应用程序,并且无法使客户端持续响应(此刻为回显)发送给它的消息。使客户端不断响应来自服务器的消息
client.c
#define BUF_SIZE 1024
int ctrlsockfd;
void error(const char *message);
void closeStreams();
void writeResponse(const char *message);
int main (int argc, const char *argv[]) {
printf("Client\n");
// Connection code snipped
// Handle responses
int bytes_read;
char buffer[BUF_SIZE];
while (1) {
// Fetch a message
bytes_read = read(ctrlsockfd, buffer, BUF_SIZE);
if (bytes_read == -1) {
error("Failed to read");
}
// Send it back
if (write(ctrlsockfd, buffer, strlen(buffer) + 1) == -1) {
error("Failed to write");
}
}
// Disconnect
closeStreams();
return 0;
}
host.c
#define BUF_SIZE 1024
#define LISTENPORT 9735
void closeStreams();
void error(const char *message);
int ctrlsockfd, clientsockfd;
int main (int argc, const char *argv[]) {
printf("Server\n");
// Connection code snipped
// Accept a request (blocking) - we can only connect to one client at a time
clientlen = sizeof(clientaddr);
clientsockfd = accept(ctrlsockfd, (struct sockaddr *) &clientaddr, (socklen_t*) &clientlen);
if (clientsockfd == -1) {
error("Error accepting");
}
while (1) {
// Read input string from stdin
printf("> ");
char message[BUF_SIZE];
if (scanf("%s", message) == -1) {
error("Failed to read from terminal");
}
// Send to client
if (write(clientsockfd, message, strlen(message) + 1) == -1) {
error("Failed to send message");
} else {
printf("Sent message %s\n", message);
}
// Read response from client
char response[BUF_SIZE];
if (read(clientsockfd, response, BUF_SIZE) == -1) {
error("Error reading response");
} else {
printf("Response: %s\n", response);
}
// Close the connection
closeStreams();
}
}
这里有什么问题吗?
是,在我的情况下,我需要扭转角色,这样你才可以切换名称 - 我也只需要听一个客户端的请求。 – Ross 2011-04-24 12:10:51
@Ross - 还好,请注意,如果您想继续发送数据,请关闭服务器回路末端的连接,否则不应关闭连接。 – MByD 2011-04-24 12:12:34
啊,那就是问题所在 - 感谢您的帮助(以及其他问题)! – Ross 2011-04-24 12:14:25