说我有一个服务器和客户端,类似于下面的代码,该代码是从这里获取的:https://wiki.python.org/moin/TcpCommunication#Client
服务器:
1 #!/usr/bin/env python
3 import socket
4
5
6 TCP_IP = '127.0.0.1'
7 TCP_PORT = 5005
8 BUFFER_SIZE = 20 # Normally 1024, but we want fast response
9
10 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
11 s.bind((TCP_IP, TCP_PORT))
12 s.listen(1)
13
14 conn, addr = s.accept()
15 print 'Connection address:', addr
16 while 1:
17 data = conn.recv(BUFFER_SIZE)
18 if not data: break
19 print "received data:", data
20 conn.send(data) # echo
21 conn.close()
客户:
1 #!/usr/bin/env python
2
3 import socket
4
5
6 TCP_IP = '127.0.0.1'
7 TCP_PORT = 5005
8 BUFFER_SIZE = 1024
9 MESSAGE = "Hello, World!"
10
11 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
12 s.connect((TCP_IP, TCP_PORT))
13 s.send(MESSAGE)
14 data = s.recv(BUFFER_SIZE)
15 s.close()
16
17 print "received data:", data
在我看来,当客户端连接到服务器时,会为其分配一个稍微随机的端口,它将监听响应。
我的问题是我如何显式设置客户端将在哪个端口上侦听响应并将其传达给服务器?
我想从服务器到客户端接收味精,例如,应该在端口5023上监听,而不是在某些随机分配的端口上监听。
答案 0 :(得分:1)
此问题应标记为重复。原始答案在这里: Python socket-module: How to change the local port on the client side?
基本上,在客户端调用connect()之前,他们可以选择
bind((HOST, PORT)
其中HOST是客户端的IP地址,而PORT是客户端要侦听的端口。
答案 1 :(得分:1)
#!/usr/bin/env python
import socket
TCP_IP = '127.0.0.1'
TCP_PORT = 5005
BUFFER_SIZE = 1024
MESSAGE = "Hello, World!"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('',5023))
s.connect((TCP_IP, TCP_PORT))
s.send(MESSAGE)
data = s.recv(BUFFER_SIZE)
s.close()
print("received data:", data)
在创建套接字后使用bind。刚刚在Py3上进行了测试,在我看来您使用的是Py2.7,但它应该可以正常工作。
答案 2 :(得分:0)
我认为您的客户端会像您在s.connect
中设置的那样监听TCP_PORT;并且服务器监听您在s.bind