Написал сервер простой: | Код | //=====================================================
#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <string.h> #include <time.h> #include <unistd.h> #include <stdio.h>
//=====================================================
int main() { struct sockaddr_in addr;
memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port = htons(1200); addr.sin_addr.s_addr = INADDR_ANY; int sock = 0, c_sock = 0;
sock = socket(PF_INET, SOCK_STREAM, 0); if (sock > 0) printf("Socket established...%d\n", socket); else { perror("Can't establishe socket - "); return 0; } if (bind(sock, (struct sockaddr*)&addr, sizeof(addr)) == 0 ) printf("Socket was binded...\n"); else { perror("Can't bind socket - "); return 0; } listen(sock, 5);
while(1) { c_sock = accept(sock, NULL, NULL);
if (c_sock > 0) { printf("Connection with client established. Trying to send data...\n"); char buf[6] = {"There"}; memset(buf, 0, 6); //write(c_sock, buf, strlen(buf)); int len = send(sock, buf, sizeof(buf), 0); printf("Sended - %d", len); printf("Data has been sended without any checking\n Shuting down sockets and closing them...\n"); shutdown(c_sock, 0); close(sock); break; } }
return 0; }
//=====================================================
|
И клиент к нему: | Код | //==================================================================
#include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <arpa/inet.h> #include <string.h> #include <unistd.h> #include <stdio.h>
//==================================================================
int main() { struct sockaddr_in addr; memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port = htons(1200); addr.sin_addr.s_addr = inet_addr("000.000.000.000");
int sock = 0;
sock = socket(PF_INET, SOCK_STREAM, 0); if (sock > 0) printf("Socket established...%d\n", socket); else { perror("Can't establishe socket - "); return 0; } connect(sock, (sockaddr*)&addr, sizeof(addr)); char buf[6]; memset(buf, 0, 6); //read(sock, buf, 5); recv(sock, buf, sizeof(buf), 0); printf("Recieved data: \"%s\"\n Shuting down the sockets and closing them...\n", buf); shutdown(sock, 0); close(sock);
return 0; }
//==================================================================
|
Такая ситуация: запускаю сервер, идёт ожидание, запускаю клиент - он выполняется, но данных не принемает. Смотрю что в консоле кидал сервер, в результате, не вижу сообщения "Data has been sended without any checking\n Shuting down sockets and closing them..." Следовательно, программа почему-то самозавершется на попытке отправки пакета. Что за маза? Сижу под Альт Линуксом, работаю на бездисковом терминале через XDMCP Нашёл ошибку, я посылал данные на сокет, а не сокет клиента. Надо поменять | Код | int len = send(sock, buf, sizeof(buf), 0);
|
На | Код | int len = send(c_sock, buf, sizeof(buf), 0);
|
Но клиент данные всё равно не получает, говорит, что строка пустая и всё.
--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
|