소켓 프로그래밍을 배우려고 하는데 소켓을 설정하는 다음 기능이 있습니다.
29 int CreatePassiveSock(char *protocol, char *portstr, int qlen) {
30 int s, port, type, saddrlen;
31 char *endptr;
32 struct sockaddr_in saddr;
33 port = (int) strtol(portstr, &endptr, 10);
34 if (*endptr) {
35 printf("\nPlease specify a positive integer for port\n");
36 exit(1);
37 }
38 saddrlen = sizeof(saddr);
39 memset(&saddr, 0, saddrlen);
40 saddr.sin_family = AF_INET;
41 saddr.sin_addr.s_addr = INADDR_ANY;
42 saddr.sin_port = htons(port);
43 if (strcmp("tcp", protocol) == 0)
44 type = SOCK_STREAM;
45 else if (strcmp("udp", protocol) == 0)
46 type = SOCK_DGRAM;
47 else {
48 printf("Unsupported protocol given");
49 exit(1);
50 }
51 if ((s = socket(PF_INET, type, 0)) == -1){
52 perror("socket call failed");
53 exit(1);
54 }
55 if (bind(s, (struct sockaddr *)&saddr, saddrlen) == -1) {
56 perror("Bind failed");
57 exit(1);
58 }
59 if (type == SOCK_STREAM) {
60 if (listen(s, qlen) == -1) {
61 perror("listen failed");
62 exit(1);
63 }
64 }
65 return s;
66 }
포트 번호로 6001을 사용하여 호출하면 표시되는 줄입니다.netstat -a | head
tcp 0 0 0.0.0.0:x11-1 0.0.0.0:* LISTEN
0.0.0.0:x11-1로 표시되는 이유는 무엇입니까? 0.0.0.0:6001을 얻어야 하지 않나요?
중요한 경우에는 PopOS를 실행하는 노트북에서 이 작업을 수행합니다.
답변1
TCP 포트 6001은 식별되므로 x11-1
다음 레이블을 사용하여 표시됩니다. 찾은 IP 주소에 해당하는 호스트 이름을 찾는 방법과 /etc/services
유사한 netstat
방식으로 찾은 포트 번호에 해당하는 서비스 이름을 찾습니다. 바라보다man 5 services
설명 /etc/services
및 액세스에 사용되는 기능에 대해서는X 클라이언트는 TCP 포트 6000+<표시 번호>에 연결해야 한다는 것을 어떻게 알 수 있습니까?6000+ 범위의 포트 번호 매핑에 대한 지침입니다.
/etc/services
시스템에 어떤 서비스가 알려져 있는지 확인할 수 있습니다 .공식 레지스트리는 IANA에서 관리합니다., 당신은 찾을 수 있습니다X11 직업도 있습니다.
netstat
포트 번호를 강제로 표시 할 수 있습니다 -n
.