#c #function #sockets
#c #функция #розетки
Вопрос:
Программирование сокетов осуществляется с использованием языка си.
Я хочу продолжить до тех пор, пока не будут приняты, отправлены и восстановлены процессы в разных функциях.
Например, мы хотели бы реализовать передачу данных программирования сокетов, вызвав функцию send_data() из функции socket_strat().
Можете ли вы переслать данные из сокета сервера, созданного в socket_start (), как функцию send_data в качестве переменной?
int socket_desc , client_sock , c , read_size; struct sockaddr_in server , client; char client_message[2000]; socket_desc = socket(AF_INET , SOCK_STREAM , 0); if (socket_desc == -1) { printf("Could not create socket"); } puts("Socket created"); //Prepare the sockaddr_in structure server.sin_family = AF_INET; server.sin_addr.s_addr = INADDR_ANY; server.sin_port = htons( 8888 ); //Bind if( bind(socket_desc,(struct sockaddr *)amp;server , sizeof(server)) lt; 0) { //print the error message perror("bind failed. Error"); return 1; } puts("bind done"); //Listen listen(socket_desc , 3); //Accept and incoming connection puts("Waiting for incoming connections..."); c = sizeof(struct sockaddr_in); //accept connection from an incoming client client_sock = accept(socket_desc, (struct sockaddr *)amp;client, (socklen_t*)amp;c); if (client_sock lt; 0) { perror("accept failed"); return 1; } puts("Connection accepted");
Это процесс создания сокета сервера, который будет использоваться в start_socket, и выполните команду accept (), чтобы дождаться доступа клиента.
Я хочу вызвать функцию send_data (), когда клиент подключен.
**функция send_data()еще не реализована (функция ниже.)
write(client_sock , msg , strlen(msg));
Причина, по которой я внедряю это так, заключается в том, что…
Это связано с тем, что связь с сокетом требуется, когда в программе происходит определенное событие, которое проходит по бесконечному циклу.
Поэтому, если вы вставите функцию start_socket() в программу, которая проходит по бесконечному циклу,
Обычно связь невозможна, потому что сокет создается и становится бесконечным.
Комментарии:
1. Я не читал код, поэтому, возможно, я ошибся: » отправка и повторное выполнение процессов в разных функциях » — звучит достаточно хорошо. Это также звучит так, как будто вы стремитесь к однопоточной программе, верно? Если это так, изучите
select
семейство функций. (poll
,epoll
, …, чистыйselect
).2. Если быть точным, процесс принятия продолжается, а функция отправки() выполняется из другой функции. Recv() выполняется в разрабатываемом приложении для Android. [Единое сообщение] Я буду искать ваши ответы!
3. Поскольку вы упомянули Android: делать что-либо там, не подключаясь к существующей структуре, будет болезненно (мой личный опыт). Вместо этого используйте существующую структуру.
4. Спасибо за помощь ^^*