[英]Python s.recv() returns empty string
我在在線教程中找到了一個簡單的客戶端和服務器
#server.py
import socket # Import socket module
s = socket.socket() # Create a socket object
host = 'localhost' # Get local machine name
port = 12345 # Reserve a port for your service.
s.bind((host, port)) # Bind to the port
s.listen(5) # Now wait for client connection.
while True:
c, addr = s.accept() # Establish connection with client.
print 'Got connection from', addr
c.send('Thank you for connecting')
c.close() # Close the connection
#client # This is client.py file
import socket # Import socket module
s = socket.socket() # Create a socket object
host = 'localhost'
port = 12345 # Reserve a port for your service.
s.connect((host, port))
print s.recv(1024)
s.close # Close the socket when done
當我運行我的c lient.py
它所做的只是在應打印時打印一個空字符串(“謝謝您的連接”)。 當我從telnet連接localhost 12345時,它會很好地發送消息,所以我不知道為什么我的客戶端沒有收到消息
有什么想法嗎。 我是套接字編程的新手,很想找到一個解決方案,所以我可以繼續。
按原樣運行腳本時,出現此錯誤:
Waiting connections ...
Got connection from ('127.0.0.1', 63875)
Traceback (most recent call last):
File "serv.py", line 14, in <module>
c.send('Thank you for connecting')
TypeError: a bytes-like object is required, not 'str'
這里的幾件事:
確保您發送的是bytes
而不是str
。 您可以通過將第14行替換為:
c.send(b'Thank you for connecting')
同樣,這樣聲明套接字s
非常有用的:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
進一步閱讀:
希望它能起作用! :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.