2011-01-10 5 views
1

서버와 여러 클라이언트로 프로그램을 구현하고 있습니다. 모든 클라이언트는 서버에 데이터를 보내고 서버는 각 클라이언트의 단계를 체크 아웃합니다. 모든 클라이언트의 단계가 동일하면 서버는 다음 단계를 수행하기 위해 모든 클라이언트에 새 데이터를 보냅니다. 그리고이 과정을 계속 반복합니다.Python : 여러 클라이언트와 서버를 처리하는 방법

그러나 프로그램을 실행하면 서로 통신 할 수 없습니다. 여기에 내 코드가있다. 힌트 좀 줄래?

클라이언트 & 클라이언트는 순서를 필요로하는 동안 서버가, 순서 socket(), bind(), listen(), accept() (아마도 하나 이상의 클라이언트를 서비스하기 위해 accept()를 반복)을 수행해야

#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() 
+1

UDP를 사용해야하는 이유가 있습니까? UDP가 무엇이고 어떻게 동작하는지 알고 계시길 바랍니다. http://en.wikipedia.org/wiki/User_Datagram_Protocol –

답변

1

서버 socket() , connect().

귀하의 누락되었습니다 listen() 제가 처음 봤습니다. 소켓에 대한 연결을 청취하십시오. 이것 link text

1

봐 : http://heather.cs.ucdavis.edu/~matloff/Python/PyNet.pdf

그것은 클라이언트와 서버의 작업 예제를 포함하여 아주 좋은 파이썬 네트워킹 튜토리얼입니다 여기에

더. 자, 저는이 문제에 대해 전문가가 아니지만 코드가 복잡 해지면 나에게 보인다. 그리고 주석으로 처리 된 모든 줄은 어떻게 처리됩니까? 질문에서

인용구 :

#UDPSock.listen(1) 
#UDPSock.sendto(msg, addr) 
#FILE = open("gen1000.dat","r+") 
#sending_data = FILE.read() 
#FILE.close() 

최종 견적

사람들은 나에게 꽤 중요한 라인처럼 보인다.

또한 컴퓨터가 연결되어 있는지 확인하십시오. 프롬프트에서 다음을 실행 : 동일한 LAN에 연결되지 않은 경우,이 더 힘들어 당신이 수도 다음 포트 포워딩을 필요로하게된다 : [IP] 다른 기계 (주의 IP 주소입니다

ping [IP] 

고정 IP).

+1

이 답변에 언급 된 문서는 더 이상 제공되지 않습니다. 그 대답과는 별도로 나머지는 대답보다는 논평처럼 보입니다. – gmauch

관련 문제