2017-01-08 74 views
1

我正在使用python中的套接字庫進行聊天,它的工作原理只有一半,當你將netcat放到我正在用作通道的地方時,我可以發送消息和其他終端能夠接收它們,但是,當終端發送消息時(輸入文本,然後按回車鍵),我沒有通過python腳本收到它。所以,我跑它以下列方式原料: 蟒蛇殼:進行套接字聊天時出錯

import socket 
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM) 
sock.bind(("127.0.0.1",8000) 
sock.listen(2) 
(client, (ip,port))=sock.accept() 

終端:

nc 127.0.0.1 8000 

這個工作,併發送或在Python外殼都是我要做的就是類型得到:襪子。發送(「信息」)或sock.recv(2012) 這裏是我的代碼:

#!/bin/python 
import socket 
import subprocess 
from subprocess import Popen, PIPE 
import time 
class color: 
    r = '\033[31m' 
    g = '\033[32m' 
    d = '\033[0m' 
    b = '\033[94m' 
    p = '\033[35m' 

def clear(): 
    print('\n' * 100) 

chat_clients = [] 

sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM) 
clear() 

def chatting_on_serverr(): 
     (client, (ip, port))=sock.accept() 
    def chatting_on_server(): 
     message = raw_input("Send Message: ") 
     client.send(message + '\n') 
     client.recv(2012) 
     chatting_on_server() 
    chatting_on_server() 

def make_channel(): 
    print color.b + '[+] '+color.d+'Welcome to the chat server'+color.b+' [+]' 
    host = raw_input("Channel Name: ") 
    port = input("Channel Access Key: ") 
    clear() 
    print color.p + "[info] "+color.b+"Making %s" % host 
    time.sleep(1) 
    sock.bind((host,port)) 
    sock.listen(3) 
    print color.g + "[+] "+color.d+"Channel Made"+color.g+" [+]"+color.d 
    print("[info]: Waiting for people to join your channel...") 
    global chatting_on_serverr 
    global chatting_on_server 
    chatting_on_serverr() 

clear() 
make_channel() 
+0

什麼是與全球的輸出?爲什麼一個函數內的函數?你可以使用一個簡單的循環。 –

+0

全球在那裏,因爲沒有它,我不斷收到一個錯誤,聲稱聊天chat_on_server是前面提到的,我得到了幾個解析錯誤,他們我相信很好,但會循環幫助無法接收郵件問題?如果是這樣,請發送一個示例@DoronCohen –

回答

0

所有這一切都需要做的是打印.recv功能 X = client.recv(2020) 打印(X)

0

我不能重現此我由於網絡限制計算機上,但我建議你看看這個Python聊天客戶端和服務器的tutorial。它會解釋很多關於套接字和網絡的知識。

除此之外,您不應該在代碼中定義與函數具有相同名稱的全局變量。它可能會覆蓋他們的聲明。另一件事是函數內部的函數。你可以這樣寫:

def chatting_on_server(): 
    client, (ip, port) = sock.accept() 
    while True: 
     message = raw_input("Send Message: ") 
     client.send(message + '\n') 
     client.recv(2012) 

而且你會得到相同的功能。另外,由於chatting_on_server自稱永遠存在堆棧溢出錯誤,因此冒險自己。

祝你好運!

+0

我明白你的意思了,只是試了一下,但遺憾的是它有相同的輸出,我可以發送和接收方收到,但是當接收方發送消息時,我的內容沒有顯示結束,它只是循環回發送消息。 @DoronCohen –

+0

我建議你閱讀我引用的教程並嘗試一下,除非別人能夠讓你的代碼工作。 –