Что-то я не понял, как в новом форуме можно приаттачить файл к сообщению. Потому вот скорее схема, чем готовый пример: Sender Код (Text): #define RECEIVER_PORT 65000 int l; struct sockaddr_in remote; size_t i; l = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); remote.sin_family = AF_INET; remote.sin_port = htons(RECEIVER_PORT); remote.sin_addr.s_addr = htonl(...); connect(l, (struct sockaddr*)&remote, sizeof(struct sockaddr_in)); send(l, buf, buflen, 0); close(l);
Receiver Код (Text): #define RECEIVER_PORT 65000 unsigned char buf[] = { 0, 0, 0, 0 }; size_t buflen = sizeof(buf); int l, r; struct sockaddr_in local, remote; socklen_t remote_size; ssize_t n, i; l = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); local.sin_family = AF_INET; local.sin_port = htons(RECEIVER_PORT); local.sin_addr.s_addr = htonl(INADDR_ANY); bind(l, (struct sockaddr*)&local, sizeof(struct sockaddr_in)) listen(l, SOMAXCONN); memset(&remote, 0, sizeof(remote)); remote_size = sizeof(remote); r = accept(l, (struct sockaddr*)&remote, &remote_size); close(l); for (n = recv(r, buf, buflen, 0); n > 0; n = recv(r, buf, buflen, 0)) { /* Now we have next n incoming bytes. Do with them whatever you need. */ ... } if (n < 0) perror("recv() failed"); close(r);
Bert Приаттачить файл можно в форме полного ответа (ссылка "Ответить" внизу справа каждого поста или треда).
Вроде сам сделал. Появлися еще один вопрос... Допустим я отослал данные через send(....) Как потом правильно принять другие данные через recv(..), или наоборот Что то не получается
Rustem в инете есть очень хорошая книга, которая как нельзя в полной мере отражает архитектуру сокетов в Unix, а так же блокирующие, не блокирующие, асинхронные и не асинхронные сокеты и т.д. Я думаю после прочтения ее, все твои проблем отпадут. Короче в ней тыша с лишним страниц и имя ей: Ричард Стивенс "UNIX: разработка сетевых приложений". На natahaus.ru она имеется. Так же вышла редакция оной в которой были учтены последние нововведения(про это на piter.com), которую можно только купить