我一直在阅读有关Python - Network Programming的信息,并尝试过代码。
看看不带括号的print语句,此代码适用于Python 2。
自从我使用Python3以来,我已经对其进行了修改。
这是更新的代码。
server.py
#!/usr/bin/python # This is server.py file
import socket # Import socket module
s = socket.socket() # Create a socket object
host = socket.gethostname() # 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.py
#!/usr/bin/python # This is client.py file
import socket # Import socket module
s = socket.socket() # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345 # Reserve a port for your service.
s.connect((host, port))
print(s.recv(1024))
s.close() # Close the socket when done
然后我按照教程中的说明运行这两个代码。
以下操作将在后台启动服务器。 $ python server.py&
服务器启动后,如下运行客户端:$ python client.py
这将产生以下结果-
收到来自('127.0.0.1',48437)的连接
但是,我得到的输出略有不同。
最初,我运行python server.py
。没啥事儿。
执行python client.py
后,出现以下错误。
user@linux:~$ python server.py
Got connection from ('127.0.0.1', 59546)
Traceback (most recent call last):
File "server.py", line 16, in <module>
c.send('Thank you for connecting')
TypeError: a bytes-like object is required, not 'str'
user@linux:~$
user@linux:~$ python client.py
b''
user@linux:~$
代码有什么问题以及如何解决?
答案 0 :(得分:2)
您可以尝试以以下方式对消息进行编码,而不是像字符串一样发送消息:
...
msg = 'Thank you for connecting'
c.send(str.encode(msg))
...
在客户端,您可以使用
将其解码s.recv(1024).decode('utf-8')
答案 1 :(得分:2)
就是这样
c.send(b'谢谢您的连接')