Клиент-серверное приложение Python socket - PullRequest
1 голос
/ 18 августа 2010

Я написал два приложения, которые взаимодействуют через сокет.Это код:

Сервер:

import socket

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(("",9999))
server_socket.listen(5)

video = True
power = True

print "TCPServer Waiting for client on port 9999"

while 1:
    client_socket,address = server_socket.accept()
    print "I got a connection from ", address

    while 1:
        data = client_socket.recv(512)
        if data == 'vc' & video == True:
            data = 'You can connect to Video'
            video = False
            client_socket.send(data)
        elif data == 'pc' & power == True:
            data = 'You can connect to Power Switch'
            power = False
            client_socket.send(data)
        else :
            data = 'Device is in use - wait a few secconds'
            client_socket.send(data)

Клиент:

import socket
import time
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(("localhost", 9999))
while 1:
    data = ( 'Please vc or pc: ' )
    time.sleep(5)
    if data=='pc' | data=='vc':
        print 'send to server: ' + data
        time.sleep(5)
        client_socket.send(data)
        data = client_socket.recv(512)
        print data
    else:
        print 'bad data - please try again'

    print data
    time.sleep(5)

Я только началмое приключение с розетками и у меня есть проблема.Почему я не вижу ответа сервера?Я вставляю код time.sleep (), чтобы остановить программу и увидеть ответные сигналы, но эти приложения завершают работу после того, как я написал первое сообщение в клиентском терминале, и нажимаю ввод.Пожалуйста, помогите мне.

Я работаю на Windows 32bit.Python 2.6

1 Ответ

2 голосов
/ 18 августа 2010

Вы ничего не отправляете.Я предполагаю, что строка data = "Please vc or pc: предназначена для получения ввода от пользователя, но она просто присваивает строку данным.Затем, когда вы проверяете if data == 'pc' | data == 'vc', проверка завершается неудачно, поэтому выводятся «неверные данные».

Также не используйте | в логических выражениях - используйте or и and.|и & будет выполнять побитовую манипуляцию - иногда это будет делать правильно, но в других случаях это будет кусать вас в зад.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...