2011-03-16 55 views
3

我已经做了一些网络Python编程的这些日子,想确认的流程,我认为发生在客户端和服务器之间:Socket编程在Python - 实际的远程端口

  • 的服务器监听给定 播发端口(9999)
  • 客户端通过创建一个新的套接字(例如1111)
  • 的服务器接受该客户机请求,并自动产生一个新的套接字连接到服务器(????)现在将处理客户端和服务器之间的通信

正如你可以看到,在上述流程中有3个插座参与:

  • 监听到客户端的服务器套接字
  • 客户端
  • 插座催生了插座被催生服务器来处理客户端

我知道获得前两个插座(9999和1111)的端口,但不知道如何获得与客户端通信的“真实”端口E服务器一面。我片断正在使用现在的问题是:

def sock_request(t): 
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    s.connect(('localhost', 9999)) 
    print('local sock name: ' + str(s.getsockname())) 
    print('peer sock name: ' + str(s.getpeername())) 
    s.send('a' * 1024 * int(t)) 
    s.close() 

上获得这实际上与客户端通信的服务器上的“端口”号的任何帮助,将不胜感激。 TIA。

回答

4

新的套接字位于同一个端口上。 TCP连接由4条信息标识:源IP和端口以及目标IP和端口。因此,您的服务器在同一端口上有两个套接字(即监听套接字和接受套接字)并不成问题。

+1

五条信息:源地址,源端口,目的地址,目的端口,协议。 – 2011-03-16 20:13:10

+0

由于我们谈论的是TCP连接,因此协议是隐含的。在IP级别,协议是有区别的 - 也就是说,您可以在同一本地/远程地址/端口组合之间使用TCP和UDP。 – dty 2011-03-16 21:17:37

+0

@dty:好的,所以如果我弄明白了,四部分元组唯一标识每个“TCP”数据包?我从来没有做过汇编或低级编程,但没有与客户端通信的相同“端口”*和*聆听新请求阻塞端口?这是否意味着我的第3步错了(服务器为客户端分配一个新的套接字)? – sasuke 2011-03-17 05:25:12