我已经创建了一个套接字,我正在尝试接受连接。一切正常。但是,输出让我对以下代码的工作方式感到困惑。
// this a server program
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>
#include <sys/stat.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/un.h>
#include <arpa/inet.h>
#include <errno.h>
#include <wait.h>
#define LISTENQ (1024)
int main(void) {
int lstn_sock, conn_sock;
struct sockaddr_in my_serv;
short int pnum = 4080;
// create listening socket
if( (lstn_sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
printf("Error (socket): %s\n",strerror(errno));
exit(1);
}
// initialize socket address
memset( &my_serv, 0, sizeof(my_serv) );
my_serv.sin_family = AF_INET;
my_serv.sin_addr.s_addr = INADDR_ANY;
my_serv.sin_port = htons(pnum);
// associate address with socket.
if( bind(lstn_sock, (struct sockaddr *) &my_serv, sizeof(my_serv)) < 0){
printf("Error (bind): %s\n",strerror(errno));
exit(1);
}
//printf("lstn_sock: %d\n",lstn_sock);
// start listening to socket
if( listen(lstn_sock, LISTENQ) < 0){
printf("Error (listen): %s\n",strerror(errno));
exit(1);
}
// make it a daemon
while(1){
// retrieve connect request and connect
if( (conn_sock = accept(lstn_sock, NULL, NULL)) < 0){
printf("Error (accept): %s\n",strerror(errno));
exit(1);
}
printf("The server says hi!\n");
// close connected socket
if( close(conn_sock) < 0){
printf("Error (close): %s\n",strerror(errno));
exit(1);
}
}
return 0;
}
@ubuntu:$ ./my_code & @ubuntu:$ telnet localhost 4080
以下是上述代码的 2 个不同输出:
Output1
Trying ::1...
Trying 127.0.0.1..
Connected to localhost。
转义字符是 '^]'。
服务员打招呼!
外部主机关闭连接。
Output2
Trying ::1...
Trying 127.0.0.1..
服务器打招呼!
连接到本地主机。
转义字符是 '^]'。
外部主机关闭连接。
有人可以解释“服务器打招呼!”移动的原因吗?
在输出中。