2014-01-12 2 views
1

Я хочу отправить данные более одного раза. У меня есть следующий код на сервере и на клиенте:Отправка нескольких строк в программировании сокетов python

На сервере:

import socket 
import RPi.GPIO as GPIO 

GPIO.setmode(GPIO.BCM) 
GPIO.setup(14,GPIO.OUT) 
GPIO.setup(15,GPIO.OUT) 

serversocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM) 
host="10.168.1.50" 
port=80 
print(host) 
print(port) 
serversocket.bind((host,port)) 


serversocket.listen(5) 
print('server started listening') 
while 1: 
    (clientsocket,address)=serversocket.accept() 
    print("connection established from : ",address) 
    data=clientsocket.recv(1024).decode() 
    print(data) 
    if (data=='hai'): 
     GPIO.output(14,True) 
     GPIO.output(15,False) 
     print 'hello' 
    else: 
     GPIO.output(14,False) 
     GPIO.output(15,False) 
    clientsocket.send("data is sent".encode()) 

На клиенте:

import socket 

s = socket.socket() 
host = "10.168.1.50" 
port = 80 
s.connect((host,port)) 
while True: 

    in_data=raw_input(" Enter data to be sent > ") 
    s.send(in_data.encode()) 
    s.send('hai'.encode()) 
    data = '' 
    data = s.recv(1024).decode() 
    print (data) 
    s.close 

я отправляю первую строку, получить ответ, но когда я посылаю второй строка, она висит. Как я могу это решить?

+0

Посмотрите на свой код клиента. Второе время вокруг цикла, что отличаетс от сокета ''? Да, вы его закрыли :) –

+1

Опасайтесь, что вы пишите 's.close' здесь, но я думаю, что на вашей стороне вы намерены' s.close() ', и это ваша проблема ... вы закрываете соединение после первого Отправить. –

ответ

0

Это мой клиент, и он работает.

import socket 

s = socket.socket() 
host = "10.168.1.50" 
port = 80 
s.connect((host,port)) 
try: 
    while True: 
     in_data=raw_input(" Enter data to be sent > ") 
     s.send(in_data.encode()) 
     s.send('hai'.encode()) 
     data = '' 
     data = s.recv(1024).decode() 
     print (data) 
finally: 
    s.close() 
+0

Извините, что один не решил мою проблему. Модификация была необходима и на стороне сервера. :) Спасибо за совет. – user3174434

+0

Мне пришлось переместить (clientsocket, address) = serversocket.accept() над временем. Тогда это сработало :) – user3174434

1

Вот код, который работал

На сервере:

import socket 
import RPi.GPIO as GPIO 

GPIO.setmode(GPIO.BCM) 
GPIO.setup(14,GPIO.OUT) 
GPIO.setup(15,GPIO.OUT) 

serversocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM) 
host="10.168.1.50" 
port=80 
print(host) 
print(port) 
serversocket.bind((host,port)) 


serversocket.listen(5) 
print('server started listening') 
(clientsocket,address)=serversocket.accept() 
print("connection established from : ",address) 
while 1: 
    data=clientsocket.recv(1024).decode() 
    print(data) 
    if (data=='hai'): 
     GPIO.output(14,True) 
     GPIO.output(15,False) 
     print 'hello' 
    else: 
     GPIO.output(14,False) 
     GPIO.output(15,False) 
    clientsocket.send("data is sent".encode()) 

На клиенте:

import socket 

s = socket.socket() 
host = "10.168.1.50" 
port = 80 
s.connect((host,port)) 
try: 
    while True: 

     in_data=raw_input(" Enter data to be sent > ") 
     s.send(in_data.encode()) 
     data = '' 
     data = s.recv(1024).decode() 
     print (data) 
finally: 
    s.close() 
Смежные вопросы