我对python非常陌生,在使用socket模块设置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()
代码如下:
^{pr2}$我试图让变量“client_address”存储客户机的IP地址,但在运行它时,结果却一无所获。这个变量根本没有赋值。在我检查了“client”中存储的值后,我发现:
'<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()
谢谢大家!我的问题基本解决了。以下是固定代码:
它现在可能还存在一些问题(尽管现在编译仍然会有一些问题)。再次感谢!在
相关问题 更多 >
编程相关推荐