LINUX.ORG.RU

работа с сокетами


0

0

Пролема: подключаюсь прогой к терминальному серверу с помощью сокета. Посылаю команду серверу и хочу прочитать ответ сервера из сокета, а в ответ один "мусор". Потом, через несколько строчек программы снова читаю сокет и в этот раз там лежит ответ сервера. В чем проблема и как получать ответ от сервера незамедлительно и нормальный? Спасибо


Так - берешь литр не два водки и пьешь с сервером пока не станет ответ приходить сразу ...

запарили дурни слора

афтор иди в футболл играть :)

anonymous
()
Ответ на: комментарий от anonymous

sock_1 = socket(AF_INET, SOCK_STREAM, 0); sock_2 = socket(AF_INET, SOCK_STREAM, 0);

memset((char *)&srv1, 0, sizeof(srv1)); memset((char *)&srv2, 0, sizeof(srv2)); srv1.sin_family = AF_INET; srv1.sin_port = htons(2005);

inet_aton("192.168.0.15",&(srv1.sin_addr));

con = connect(sock_1, (struct sockaddr *)&srv1, sizeof(srv1));

if (con<0) { fprintf(stderr, "util> Unable to connect: %s\n", strerror(errno)); close(sock_1); exit(-1); }

После этого идет send и recv

bobych
() автор топика
Ответ на: комментарий от bobych

2005 оригинально ... тебе ж сказали что ошибка в днк и все телепаты на юг улетели ... у тебя проблема в том что @ Посылаю команду серверу и хочу прочитать ответ сервера из сокета, а в ответ один "мусор".@ Так вот ... покажи код где сервер отсылает ответ ... или иди ищи обертку на плюсах

anonymous
()
Ответ на: комментарий от anonymous

Под сервером понимается терминальный сервер Cisco. К одному из его com-портов подключен самый заурядный модем. с помощью telnet <ip-addr> 2005 можно прицепиться непосредственно к модему и отсылать команды как в обычном теминале. Хотелось бы программно реализовать подключение к серверу (Cisco) и инициализацию модема.

bobych
() автор топика
Ответ на: комментарий от bobych

О!! наконец-то ... теперь жди нормальных ответов :)

покажи весь код клиента(или хотя бы отсылки).

anonymous
()
Ответ на: комментарий от bobych

Всего быстрее что ты первый раз посылаешь не правильно ... а второй правильно покажи код чтобы точно сказать.

anonymous
()
Ответ на: комментарий от cvv

>телепаты в отпуске (с)Die-Hard

Про Copyright - наглая ложь. Извините.

anonymous
()
Ответ на: комментарий от anonymous

ret_code1= fscanf(command_in_1,"%s\n",mdm_command); fprintf(stdout,"mdm_util>read command %s \n",mdm_command); str_len = strlen(mdm_command); strcpy(&mdm_command[str_len], "\r\n"); str_counter = 0; while(ret_code1>0) { fprintf(stdout,"mdm_util>send:%s",mdm_command); bytes_sent = send(sock_1, mdm_command, str_len+3,0); //fprintf(stdout,"write %i bytes \n",bytes_sent); ret_code1 = recv(sock_1, &buffer1, 1,0); if (ret_code1==-1) { fprintf(stderr, "mdm_util> recv() error: %s\n", strerror(errno)); } if(ret_code1>0) { buffer1 = buffer1+80; res_str[str_counter] = buffer1; fprintf(stdout,"mdm_util>get: %c %d\n",buffer1,buffer1); str_counter++; printf("str=%s \n",res_str); }

}

ret_code1= fscanf(command_in_1,"%s\n",mdm_command); str_len = strlen(mdm_command); strcpy(&mdm_command[str_len], "\r\n"); }

/*initialization of 1st modem completed*/

в файле command_in_1 лежат строчки с командами модему типа ATZ AND и т.д.

а на выходе получается

mdm_util>read command ATZ mdm_util>send:ATZ mdm_util>get: &yuml; -1 mdm_util>get: &ucirc; -5 mdm_util>get: 1 mdm_util>get: &yuml; -1 mdm_util>get: &ucirc; -5 mdm_util>get: 3 mdm_util>get: &yuml; -1 mdm_util>get: &yacute; -3 mdm_util>get: 24 mdm_util>get: &yuml; -1 mdm_util>get: &yacute; -3 mdm_util>get: 31

bobych
() автор топика

вот интуитивно понятная схема, тут грех не разобраться 


#сервер

import socket

HOST = '127.0.0.1'
PORT = 50007
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
print 'Connected by', addr
while 1:
    data = conn.recv(1024)
    if not data: break
    conn.send(data)
conn.close()

#клиент

import socket

HOST = '127.0.0.1'
PORT = 50007
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.send('fuck you')
data = s.recv(1024)
s.close()
print 'Received', repr(data)

balbes
()
Ответ на: комментарий от bobych

> Это была попытка подогнать получаемый ответ под ожидаемый... попытка неудачная.

А теперь подыми RFC на телнет, внимательно проанализируй "мусор". То что ты получаешь первый раз - инициализация telnet сессии в которой терминалы договариваются о списке поддерживаемых фич (мигание, цветность,скролл и т.д.)

voiD
()
Ответ на: комментарий от voiD

Спасибо... чуть запоздал ответ :) я уже разобрался

bobych
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.