我正在编写一个简单的客户端/服务器应用程序,并且无法让客户端不断响应(此时,回显)发送给它的消息。
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();
}
}
这里有什么问题?
答案 0 :(得分:2)
我认为你在这里混淆了服务器和客户端。通常,服务器会侦听端口并等待消息然后响应它们。 此外,如果在每次迭代中关闭连接,或者不关闭连接,则accept()需要成为循环的一部分。
Server client
wait
connect
send data
read data
send data
read data
<maybe iteration of send / receive here >
close close
wait
...
答案 1 :(得分:1)
这里有更多错误,但我马上做了这个:
// Send it back
if (bytes_read > 0 && write(ctrlsockfd, buffer, strlen(buffer) + 1) == -1) {
error("Failed to write");
}
有点想知道当没有读过的东西时,那些写的是......