套接字错误是什么意思,我该如何解决它们?

时间:2016-01-12 06:23:11

标签: python-3.x

我知道套接字还有其他一些问题,但没有什么对我有用。我是新手,我在Python 3.4上工作。

对于我的服务器,这是我的代码:

import socket
s = socket.socket()
host = socket.gethostname()
port = 80
s.bind(host, port))
s.listen(5)
while True:
    c, addr = s.accept()
    print("Got connection from", addr)
    c.send("Thank you for connecting")
    c.close()

我的客户代码:

import socket

s = socket.socket()
host = socket.gethostname
port  = 80

s.connect((host, port))
print (s.recv(1024))
s.close

对于SERVER代码,我收到错误消息:

Traceback (most recent call last):
  File "/Users/Gautam/Documents/server.py", line 6, in <module>
    s.bind((host, port))
PermissionError: [Errno 13] Permission denied

对于客户端,我收到错误消息:

Traceback (most recent call last):
  File "/Users/Gautam/Documents/client.py", line 7, in <module>
    s.connect((host, port))
ConnectionRefusedError: [Errno 61] Connection refused

1 个答案:

答案 0 :(得分:2)

低于1024的端口号是为系统保留的,您需要具有将套接字绑定到这些端口的特殊权限。您需要使用1024以上的其他端口号。

第二个错误应该很容易理解,因为错误消息明确地说

  

拒绝连接

由于服务器无法运行,您希望客户端如何连接到它?

在相关说明中,不要为自己的服务器使用“众所周知的”端口号,除非您实际上计划执行端口“众所周知”的操作。例如,端口80通常由Web服务器使用,因此除非您打算创建Web服务器,否则不应使用该端口。

即使1024以上的端口有时也被称为“众所周知的”端口。首先检查/etc/services以查看您选择的端口是否可用。请注意,某些服务非常模糊且使用不多,但您仍应避免使用根据/etc/services已经“保留”的端口号。