Я делаю программу для сокетов в среде MacOS, используя Xcode 11.3.1. В настоящее время я делаю проект мой проект с шаблоном Project - MacOs - Command Line Tool
на языке C ++. Однако, когда я принимаю Socket, у меня возникают некоторые проблемы.
#include <stdio.h>
#include <iostream>
#include <unistd.h>
#include <stdio.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <netinet/in.h>
#define PORT 37716
class Communications{
public:
int server_fd, new_socket, valread;
struct sockaddr_in address;
int opt = 1;
int addrlen = sizeof(address);
char buffer[1024] = {0};
Communications(){
server_fd = socket(AF_INET, SOCK_STREAM, 0);
setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt));
address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY;
address.sin_port = htons( PORT );
bind(server_fd, (struct sockaddr *)&address, sizeof(address));
listen(server_fd, 3);
cout << "[Server] Listening in port " << PORT << endl;
new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen);
cout << "[Server] Client has successfully connected." << endl;
}
};
int main(void){
Communications CommunicationsObj = Communications();
return 0;
}
Это мой основной класс для моего кода. Это просто базовая c привязка порта, последовательность прослушивания и приема. Я подтвердил, что этот код работает, когда он скомпилирован G ++ на терминале. Я проверил с моим простым Python кодом. Однако, когда я отлаживаю с моим Xcode (та кнопка Play слева вверху), я не могу подключиться к этой программе с помощью сокета. Кажется, что XCode блокирует сетевые подключения при запуске этого кода.
Для вашей информации, скрипт Python, который я использовал для подключения к моей программе на C ++, был примерно таким.
from socket import *
port = 37716
ClientSock = socket(AF_INET, SOCK_STREAM)
ClientSock.connect(('', port))
В настоящее время я тестирую на той же машине с внутренней сетью, что означает, что все соединения будут go до 127.0.0.1
Когда я скомпилировал с G ++ и запустил в терминале среда, все идет хорошо. Однако при отладке в XCode эти ошибки появляются.
Traceback (most recent call last):
File "a.py", line 7, in <module>
client_sock.connect(('',port))
ConnectionRefusedError: [Errno 61] Connection refused
В C ++ стороне программы экран похож на
[Server] Listening in port 37716
это навсегда. Это означает, что Xcode не получил никакой передачи по этому порту.
В настоящее время я искал много путей по всему rnet, включая переполнение стека. Я попытался добавить «Возможности» в настройках XCode и включил сетевой сервер и клиент. Это не помогло и привело к другой проблеме с Xcode. Я пробовал другие методы, такие как отладка XCode с разрешениями root, но это не сработало. Кроме того, для вашей информации, мой порт 37716 является пустым портом, и ни один процесс не использует его сейчас.