如何显式设置TCP客户端正在侦听的端口?

时间:2018-10-19 18:15:05

标签: python python-3.x networking server port

说我有一个服务器和客户端,类似于下面的代码,该代码是从这里获取的: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上监听,而不是在某些随机分配的端口上监听。

3 个答案:

答案 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

中设置的TCP_PORT