制作套接字时出错

2024-04-25 12:02:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用python中的socket库进行聊天,它只起到了一半的作用,当您将netcat作为我使用的频道时,我可以发送消息,而另一个终端可以接收消息,但是,当该终端发送消息(键入文本,然后按enter)时,我不会通过python脚本接收消息。所以我用下面的方法进行了原始测试: 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 shell中发送或接收,我只需键入:袜子发送(“消息”)或袜子接收(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()

Tags: importclient终端消息serveronportdef
2条回答

所要做的就是打印.recv函数的输出 x=客户端.recv(2020) 打印(x)

由于网络的限制,我不能在我的机器上复制这个,但是我建议您看看Python聊天客户机和服务器的tutorial。它将解释很多关于套接字和网络的知识。你知道吗

除此之外,您不应该在代码中定义与函数同名的globals。它可能会推翻他们的声明。另一件事是函数内部的函数。你可以这样写函数:

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永远调用自己。你知道吗

祝你好运!你知道吗

相关问题 更多 >