2016-09-17 54 views
-1

這個accept()方法返回一個新的套接字和地址的元組,但爲什麼我需要一個新的套接字,如果我已經有一個,那麼爲什麼不使用它?爲什麼和如何在python中使用socket.accept()?

import socket 
sock = socket.socket() 
sock.bind(('', 9090)) 
sock.listen(1) 
conn, addr = sock.accept() 

print 'connected:', addr 

while True: 
    data = conn.recv(1024) 
    if not data: 
     break 
    conn.send(data.upper()) 

conn.close() 

PS:當我編程在Java中的插座,我真的沒有這樣的接受的東西,我只需要每個客戶端一個插座,每個服務器都有一個,這是有道理的。

+0

Java完全一樣。兩者都是標準Socket API的簡單包裝。 – chrylis

+1

你應該閱讀一個很好的套接字教程。它會清除這個和其他許多事情。嘗試https://docs.python.org/3/howto/sockets.html –

+0

查看[ServerSocket](https://docs.oracle.com/javase/8/docs/api/java/net/ServerSocket。 html)類。另請參見http://stackoverflow.com/questions/12454675/whats-the-return-value-of-socket-accept-in-python –

回答

1

好像你還沒有在Java中實現過TCP。

您正在與提供的例子中,使用默認的AF_INETSOCK_STREAM默認是TCP:

socket.socket([家族[,類型[,原]]]) 創建使用給定地址系列的新套接字,套接字類型和協議號。地址系列應該是AF_INET(默認),AF_INET6或AF_UNIX。套接字類型應該是SOCK_STREAM(默認),SOCK_DGRAM或者其他SOCK_常量之一。協議編號通常爲零,在這種情況下可以省略。

如果得以實施SOCK_DGRAM這是UDP,你不會需要使用sock.accept()

2

你一個監聽套接字處於活動狀態的服務器運行時,以及對於每一個接受的連接一個新的連接插座直到連接關閉。

相關問題