有关套接字模块的.accept()返回值的问题

时间:2018-10-22 22:19:47

标签: python sockets

我是python的新手,使用套接字模块设置TCP连接时遇到问题。这是我的代码的一部分:

clients = {}
addresses = {}

HOST = ''
PORT = 33000
BUFSIZ = 1024
ADDR = (HOST, PORT)
SERVER = socket(AF_INET, SOCK_STREAM)
SERVER.bind(ADDR)

def accept_incoming_connections():
    while True:
       client, client_address = SERVER.accept()
       print ("The Client is: ")
       print (client.raddr)
       print ("%s:%s has connected." % clinet_address)
       client.send(bytes("Greetings from the cave!" + "Now type your name and press enter!"),"utf8")
       addresses[client] = client_address
       Thread(target = handle_client, args = (client,)).start()

在此处的代码:

client,client_address = SERVER.accept()

我尝试使变量“ client_address”存储客户端的IP地址,但是在运行该变量时,却什么也没得到。此变量根本没有分配任何值。在检查了存储在“客户端”中的值之后,我发现了这一点:

'<socket.socket fd=4, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('10.146.0.2', 33000), raddr=('104.38.51.137', 62283)>'

在“ raddr”部分中,我找到了我的客户端IP地址和端口,那为什么呢?我确实记得accept()函数有两个返回阀。如果实际上只有一个返回值,我应该如何从该返回阀中提取客户端IP和端口?

出于需要,我还将在此处发布客户代码:

import socket               # Import Socket module
import time

myname = input ("input you username>>")
s = socket.socket()         # Create a Socket object
ip= "35.200.59.31" 
port = 33000                # setup port number

s.connect((ip, port))
s.send(bytes(myname, encoding="utf-8"))
print (s.recv(1024))
username=str(input("input user name>>"))
s.send(bytes(username))

flag=True
while flag:
    signal=s.recv(1024)
    if signal == (bytes("xxx", encoding = "utf-8")):
        tosend=(input(">>>"))
        s.send(bytes(tosend))
        print (">>",tosend)
        if tosend=="quit":
            flag = False
    else :
        print (">>>",signal)
s.close()  

1 个答案:

答案 0 :(得分:0)

谢谢大家!我的问题基本解决了。这是固定代码:

clients = {}
addresses = {}

HOST = ''
PORT = 33000
BUFSIZ = 1024
ADDR = (HOST, PORT)
SERVER = socket(AF_INET, SOCK_STREAM)
SERVER.bind(ADDR)

def accept_incoming_connections():
    while True:
       client, client_address = SERVER.accept()
       print ("The Client address is: ")
       print (client_address[0])
       print (str(client_address[0]) + " has connected.")
       client.send(bytes("Greetings from the cave!" + "Now type your name and press enter!",'utf8'))
       addresses[client] = client_address[0]
           Thread(target = handle_client, args = (client,)).start()

尽管仍然存在其他一些问题(可能是逻辑问题),至少它现在可以编译并运行。再次感谢!