我有两个c文件,服务器和客户端。服务器侦听并接受来自客户端的连接请求,然后等待打印出客户端提供给它的消息。连接过程完美运行,但我不知道如何让它中继它应该接收的消息。
由于这两个文件是分开的,我不确定将什么文件描述符放入客户端的 write() 调用中。服务器中的 read() 调用在客户端中的 write() 调用之前调用,它使用文件描述符 s2,它是其 accept() 调用的输出。
如何让我的客户端文件中的 write() 调用与我的服务器文件中的 read() 调用正在寻找的同一个套接字进行通信?
下面的代码有一些功能,比如为了时间的缘故省略了错误检查。
这是我的server.c文件的内容:
int main(int argc, char** argv) {
char buffer[257];
int pipe_fds;
int psts; // Holds result of pipe creation attempt
psts = my_pipe(pipe_fds);
if(psts == 0) { // If pipe is successful
printf(" SERVER: Server running...\n");
printf(" SERVER: Waiting for message...\n");
read(pipe_fds, buffer, 257); // <---------- Output stops here
printf(" SERVER: Message: %s\n", buffer);
close(pipe_fds);
}
return 0;
}
这是上面块中使用的函数my_pipe() :
int my_pipe(int fd) {
// SET UP CONNECTION REQUEST SOCKET: S1 -------------------------------------------
int s1 = socket(AF_UNIX, SOCK_STREAM, 0);
if(s1 == -1) {return -1;}
struct sockaddr name1 = {AF_UNIX, "ServerSocket"};
socklen_t namelen1 = sizeof(struct sockaddr) + 13;
bind(s1, &name1, namelen1);
printf("\n SERVER: [s1] Socket Created! \n");
// SET UP LISTEN/ACCEPT -----------------------------------------------------------
if(listen(s1, 1) == -1) {return -1;}
printf("\n SERVER: Server Listening! \n\n");
// SET UP CLIENT CONNECTION SOCKET: S2 --------------------------------------------
struct sockaddr name1_0;
socklen_t namelen1_0;
int s2 = accept(s1, &name1_0, &namelen1_0); // <----------- This is where s2 is defined
if(s2 == -1) {return -1;}
printf(" SERVER: Client Found...\n");
fd = s2;
close(s1);
return 0;
}
最后,这是我的client.c文件的内容:
int main(int argc, char** argv) {
char buffer[257];
// Create a socket to connect to the server with
int s0 = socket(AF_UNIX, SOCK_STREAM, 0);
if(s0 == -1) { return -1; }
// Create a sockaddr for the known existing socket "ServerSocket"
struct sockaddr server_name = {AF_UNIX, "ServerSocket"};
socklen_t server_len = sizeof(struct sockaddr) + 13;
// Connect to "ServerSocket"
if(connect(s0, &server_name, server_len) == -1) {return -1;}
printf("CLIENT: Client Connected!\n");
strcpy(buffer, "This is the Client Message.");
write([INSERT SERVER SOCKET FD], buffer, strlen(buffer) + 1); // <----- The line in question
printf("CLIENT: Message Sent!\n");
close(s0);
return 0;
}
运行这两个文件的服务器输出:
SERVER: [s1] Socket Created!
SERVER: Server Listening!
SERVER: Client Found...
SERVER: Server running...
SERVER: Waiting for message...
(infinite waiting)