我正在使用python中的套接字库进行聊天,它只能用一半的方式工作,当你将netcat用作我正在使用的频道时,我能够发送消息而另一个终端能够接收它们,但是,当该终端发送消息(键入文本,然后按回车)时,我不会通过python脚本收到它。所以我用以下方式运行它: python shell:
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 shell中发送或接收我所要做的就是输入:sock.send(" message")或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)
由于网络限制,我无法在我的机器上重现这一点,但我建议您查看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
永远会自行调用,因此您可能会面临堆栈溢出错误。
答案 1 :(得分:0)
所有需要做的就是打印.recv函数的输出 x = client.recv(2020) 打印(x)的