关于Python的socket无法建立连接
我在看programming python的时候,看了socket部分,然后编了个简单的客户端服务端程序。
例子是书上的例子,运行起来也成功了。
但是当我想让远程的机器连接我主机的时候,却总是失败。(我让我女朋友用她的电脑执行客户端脚本连接我的机器,失败;但是我用自己的机器运行客户端脚本,则成功;IP用的是我的外网IP)
代码如下:
服务端
from socket import * # get socket constructor and constants
myHost='' # ''=all available interfaces on host
myPort=50007 # listen on a non-reserved port number
sockobj=socket(AF_INET, SOCK_STREAM) # make a TCP socket object
sockobj.bind((myHost, myPort)) # bind it to server port number
sockobj.listen(5) # listen, allow 5 pending connects
while True: # listen until process killed
connection, address=sockobj.accept() # wait for next client connect
print('Server connected by', address)# connection is a new socket
while True:
data=connection.recv(1024) # read next line on client socket
if not data: break # send a reply line to the client
connection.send(b'Echo=>'+data) # until eof when socket closed
connection.close()
import sys
from socket import * # portable socket interface plus constants
serverHost="X.X.X.X" # 这里我用我自己的外网IP替换了,并让我女朋友从远程执行代码
serverPort=50007 # non-reserved port used by the server
message=[b'Hello network world'] # default text to send to server
if len(sys.argv) > 1:
serverHost=sys.argv[1] # server from cmd line arg 1
if len(sys.argv) > 2: # text from cmd line args 2..n
message=(x.encode() for x in sys.argv[2:])
sockobj=socket(AF_INET, SOCK_STREAM) # make a TCP/IP socket object
sockobj.connect((serverHost, serverPort)) # connect to server machine + port
for line in message:
sockobj.send(line) # send line to server over socket
data=sockobj.recv(1024) # receive line from server: up to 1k
print('Client received: ',data) # bytes are quoted, was 'x', repr(x)
print('success')
sockobj.close()