2016-11-30 1 views
0

파이썬 (파이썬 3이 아닌)을 사용하여 간단한 클라이언트 - 서버 프로그램을 작성하려고하는데 메시지를 입력 할 때마다 다음과 같은 다양한 오류가 발생합니다.클라이언트 - 서버 메시징 오류 (파이썬 소켓 프로그래밍)

이름을 '지옥 : 나가서 설명하자면 NameError에, "라인 1 :

파일" "잘못된 구문

또는

파일, 라인 1 안녕하세요 제 이름은 ^ 구문 에러 DARP입니다" 오 '

또는

파일 ""라인 정의되지 않은 1 안녕하세요 세계 ^ 구문 에러 :

import socket 

def Main(): 
    host = socket.gethostname() 
    port = 5000 

    s = socket.socket() 
    s.bind((host, port)) 

    s.listen(1) 
    c, addr = s.accept() 
    print("Connection from: "+str(addr)) 
    while True: 
     data = c.recv(1024).decode('utf-8') 
     if not data: 
      break 
     print("From connected user: "+data) 
     data = data.upper() 
     print("Sending: "+data) 
     c.send(data.encode('utf-8')) 
    c.close() 

if __name__ == '__main__': 
    Main() 
: 예기치 않은 EOF 여기

을 구문 분석하는 동안 서버 코드

여기 클라이언트 코드는

입니다.
import socket 

def Main(): 
    host = socket.gethostname() 
    port = 5000 

    s = socket.socket() 
    s.connect((host, port)) 

    message = input("-> ") 
    while message != 'q': 
     s.send(message.encode('utf-8')) 
     data = s.recv(1024).decode('utf-8') 
     print("Recieved from server: " + data) 
     message = input("-> ") 
    s.close() 

if __name__ == '__main__': 
    Main() 

이 연결을 만들 수 있지만 메시지를 입력하면 문제가 발생합니다. 어떤 도움을 주시면 감사하겠습니다.

답변

0

Python2에서 input 대신 raw_input을 사용하십시오.

+0

감사합니다, 하하 –

0

input 대신 raw_input을 사용해야합니다. raw_input은 입력을 캡처하여 적절한 유형으로 변환하기 때문입니다. input을 사용할 때 입력 주위에 따옴표를 추가해야합니다.

당신은 파이썬 문서에서 확인 가능 : https://docs.python.org/2/library/functions.html#raw_input

0

는 지금까지 코드에 관한 한, 당신이해야 할 유일한 변화는 서버 코드입니다. c는 연결 변수이고 s는 코드에 따라 서버의 소켓이므로 c.close()를 s.close()로 바꿉니다.

import socket 

def Main(): 
    host = "127.0.0.1"  # supply different hostname instead of socket.gethostname() 
    port = 5000 

    s = socket.socket() 
    s.bind((host, port)) 

    s.listen(1) 
    c, addr = s.accept() 
    print("Connection from: "+str(addr)) 
    while True: 
     data = c.recv(1024).decode('utf-8') 
     if not data: 
      break 
     print("From connected user: "+data) 
     data = data.upper() 
     print("Sending: "+data) 
     c.send(data.encode('utf-8')) 
    s.close()   # it is s which indicates socket 

if __name__ == '__main__': 
    Main() 

그리고 클라이언트 코드는 다음과 같이이다 :

내가 기대 한 파이썬 3

서버 코드에서 실행으로 실행 변경을 한 후, 코드 실행을 만들었다는 여기 당신이 준 :

import socket 

def Main(): 
# here, client is using the hostname whereas you need to give different 
# hostname for the server (127.0.0.1 for example) otherwise the code doesn't 
# work.You can do the reverse as well. 
    host = socket.gethostname() 
    port = 5000 

    s = socket.socket() 
    s.connect((host, port)) 

    message = input("-> ") 
    while message != 'q': 
     s.send(message.encode('utf-8')) 
     data = s.recv(1024).decode('utf-8') 
     print("Recieved from server: " + data) 
     message = input("-> ") 
    s.close() 

if __name__ == '__main__': 
    Main() 
관련 문제