2008-09-16 11 views
37

Quiero abrir un socket de cliente TCP en Python. ¿Tengo que pasar por todas las cosas de bajo nivel de BSD create-socket-handle/connect-socket o hay una forma más simple de una sola línea?La mejor manera de abrir un socket en Python

+0

[El módulo de socket de Python] (http://docs.python.org/library/socket) debería ser útil. – owenmarshall

Respuesta

63

Abrir sockets en python es bastante simple. Lo que realmente necesita algo como esto:

import socket 
sock = socket.socket() 
sock.connect((address, port)) 

y luego se puede send() y recv() como cualquier otra toma

+4

Advertencia: '(dirección, puerto)' es una tupla y, por lo tanto, un argumento único, ¡no dos argumentos! Para mayor claridad, uno podría escribirlo así: 'sock.connect ((address, port,))' – johndodo

+14

¿Cómo aumentar la claridad al agregar una coma al final de la tupla? – Jack

11

Para el desarrollo de programas de red portátiles de cualquier tipo en Python, Twisted es bastante útil. Una de sus ventajas es proporcionar una capa conveniente sobre las API de socket de bajo nivel.

+0

Twisted = overkill –

17

bien, este código trabajó

s = socket.socket() 
s.connect((ip,port)) 
s.send("my request\r") 
print s.recv(256) 
s.close() 

Era bastante difícil de trabajar que a partir de la documentación del módulo de toma de Python. Entonces, aceptaré la respuesta de TheAnti.9.

+0

Para referencia futura, es una buena práctica utilizar un parámetro más grande para socket.recv() que 256 bytes. Con frecuencia he visto 4096 usado. – junkforce

+0

Sí, buena idea junkforce. Lo que realmente quería era leer una línea de texto, ahora estoy usando la función makefile() para almacenar los datos recibidos que funcionan bien. –

+4

Olvidó verificar el valor de retorno de enviar. –

Cuestiones relacionadas