【发布时间】:2017-10-31 03:22:46
【问题描述】:
所以我一直在尝试将消息从我的虚拟机(服务器)传递到我的主机(客户端)我注意到我能够让我的服务器监听我正在监听 IP:127.0 .1.1:端口 1234。
服务器正在运行这段代码,它没有给我任何编译错误 服务器再次在我的虚拟机 (Ubuntu16_04) 上运行。
服务器脚本
import socket
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ip = socket.gethostbyname(socket.gethostname())
port = 1234
address=(ip,port)
server.bind(address)
server.listen(1)
print "[*] Started listening on ",ip,":",port
client.addr= server.accept()
print "[*] Got a connection from ",addr[0],":",addr[1]
while True:
data = client.recv(1024)
print "[*] Received '",data,"' from the client"
print " Processing data"
if(data--"Hello server"):
client.send("Hello client")
print " Processing done. \n[*] Reply sent"
elif(data=="disconnect"):
client.send("Goodbye")
client.close()
break
else:
client.send("Invalid data")
print " Processing done, Invalid data. \n[*] Reply sent"
但是当我尝试通过我的主机连接到服务器时,我收到了这个错误
> >>> import socket
>>> client=socket.socket()
>>> client.connect(('127.0.1.1',1234))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\PYTHON27\lib\socket.py", line 228, in meth
return getattr(self._sock,name)(*args)
socket.error: [Errno 10061] No connection could be made because the target machine actively refused it
这是我从 CLIENT
主机上的 windows powershell 收到的错误我的计算机上的防火墙已完全关闭,我刚刚通过本教程尝试设置静态 ip 以查看是否可以让我的系统进行通信,但没有任何变化
我也将它用于端口转发问题,认为这可能与它有关,但仍然没有运气(请注意,我使用确切的静态 IP 地址作为指南,基本上在重新尝试之前逐步完成了这些过程通过套接字连接计算机。)
如果有人知道我可以做些什么来让这种该死的连接正常工作,我将不胜感激!
这是我正在使用的代码,它通过 powershell "python 2.7.14" 给我一条错误消息
我尝试了脚本中给出的 IP,我尝试了设置静态 IP 时给出的 IP
最后,我确定在某个时候会要求这样做,所以我会把它放在这里,这基本上是我想要作为服务器的 VM 的 ifconfig
enp0s3 Link encap:Ethernet HWaddr 08:00:27:74:4c:f0
inet addr:192.168.56.56 Bcast:192.168.56.255 Mask:255.255.255.0
inet6 addr: fe80::c378:fdbb:a955:5826/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:49 errors:0 dropped:0 overruns:0 frame:0
TX packets:134 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:5620 (5.6 KB) TX bytes:14439 (14.4 KB)
enp0s8 Link encap:Ethernet HWaddr 08:00:27:42:79:85
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:4 errors:0 dropped:0 overruns:0 frame:0
TX packets:123 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:640 (640.0 B) TX bytes:20585 (20.5 KB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:252 errors:0 dropped:0 overruns:0 frame:0
TX packets:252 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:19341 (19.3 KB) TX bytes:19341 (19.3 KB)
------------------------------更新---- --------------------------
我已将原始服务器代码修改为不绑定到本地主机(如建议的那样),并尝试通过正确的 IP 连接到服务器,我现在遇到了不同的错误代码,任何关于我的建议可能搞砸了! :)
client.connect(('192.168.56.56',1234))
File "<stdin>", line 1, in <module>
File "C:\PYTHON27\lib\socket.py", line 228, in meth
return getattr(self._sock,name)(*args)
socket.error: [Errno 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because
connected host has failed to respond
【问题讨论】:
-
127.0.1.1始终是“此主机”。您需要使用非本地地址(即192.168.56.56) -
另外,您不希望您的服务器绑定到本地主机,否则外部机器将无法连接。将
0.0.0.0用于“任何主机”。 -
我继续修改元组,使其具有 '0.0.0.0' 和 ip,并使用 192.168.56.56 进行连接,现在我收到另一个错误 [Errno 10060]
标签: python-2.7 sockets server client ubuntu-16.04