簡體   English   中英

Python s.recv()返回空字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM