Python套接字客户端-服务器应用程序

1 投票
1 回答
4287 浏览
提问于 2025-04-16 02:57

我写了两个应用程序,它们通过套接字进行通信。以下是代码:

服务器:

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()来暂停程序,以便查看响应,但这些应用程序在我客户端输入第一条消息并按下回车后就结束了。请帮帮我。

我在32位的Windows上工作,使用的是Python 2.6。

1 个回答

2

你并没有发送任何东西。我猜这行代码 data = "Please vc or pc: 是想让用户输入内容,但它只是把这个字符串赋值给了data。然后当你检查 if data == 'pc' | data == 'vc' 时,这个检查失败了,所以就打印出“坏数据”。

另外,在布尔表达式中不要使用 |,应该用 orand。因为 |& 是用来做位运算的,有时候这样做可能会得到正确的结果,但其他时候可能会让你陷入麻烦。

撰写回答