我正在使用服务器和多个客户端实现一个程序。所有客户端都将数据发送到服务器,服务器检查每个客户端的步骤。如果所有客户端的步骤相同,则服务器会将新数据发送到所有客户端以执行下一步。并且它一次又一次地继续这个程序。
但是,当我运行程序时,它无法相互通信。这是我的代码。你能给我一些提示吗?
客户&服务器
#client
from socket import *
from sys import *
import time
import stat, os
import glob
# set the socket parameters
host = "localhost"
port = 21567
buf = 1024
data = ''
addr = (host, port)
UDPSock = socket(AF_INET, SOCK_DGRAM)
UDPSock.settimeout(100)
def_msg = "=== TEST ==="
#FILE = open("test.jpg", "w+")
FILE = open("data.txt","w+")
while (1):
#data, addr = UDPSock.recvfrom(buf)
print "Sending"
UDPSock.sendto(def_msg, addr)
#time.sleep(3)
data, addr = UDPSock.recvfrom(buf)
if data == 'done':
FILE.close()
break
FILE.write(data)
print "Receiving"
#time.sleep(3)
UDPSock.close()
# server program for nvt
from socket import *
import os, sys, time, glob
#import pygame
import stat
host = 'localhost'
port = 21567
buf = 1024
addr = (host, port)
print 'test server'
UDPSock = socket(AF_INET, SOCK_DGRAM)
UDPSock.bind(addr)
msg = "send txt file to all clients"
#FILE = open("cam.jpg", "r+")
FILE = open("dna.dat","r+")
sending_data = FILE.read()
FILE.close()
tmp_data = sending_data
while (1):
#UDPSock.listen(1)
#UDPSock.sendto(msg, addr)
#FILE = open("gen1000.dat","r+")
#sending_data = FILE.read()
#FILE.close()
#print 'client is at', addr
data, addr = UDPSock.recvfrom(buf)
#time.sleep(3)
print data
#msg = 'hello'
#
tmp, sending_data = sending_data[:buf-6], sending_data[buf-6:]
if len(tmp) < 1:
msg = 'done'
UDPSock.sendto(msg, addr)
print "finished"
sending_data = tmp_data
UDPSock.sendto(tmp, addr)
print "sending"
#time.sleep(3)
UDPSock.close()
答案 0 :(得分:1)
服务器必须执行序列socket()
,bind()
,listen()
,accept()
(可能会重复accept()
以便为多个客户端提供服务),而客户端只需要序列socket()
,connect()
。
我失踪的listen()
我先看到了。侦听对套接字的连接。
有关此内容的更多信息:link text
答案 1 :(得分:1)
看看这个:http://heather.cs.ucdavis.edu/~matloff/Python/PyNet.pdf
这是一个非常好的Python网络教程,包括客户端和服务器的工作示例。现在,我不是这方面的专家,但它看起来像你的代码过于复杂。与所有注释掉的线路有什么关系?
引自问题:
#UDPSock.listen(1)
#UDPSock.sendto(msg, addr)
#FILE = open("gen1000.dat","r+")
#sending_data = FILE.read()
#FILE.close()
结束语
对我来说,这些看起来非常重要。
此外,请确保已连接计算机。从提示运行:
ping [IP]
其中[IP]
是其他计算机的IP地址(注意:如果您没有连接到同一个局域网,那么这会变得更加困难,因为可能然后需要端口转发和可能静态IP)。