通过套接字从PHP发送消息到Python

时间:2014-06-03 01:29:13

标签: php python sockets

我正在尝试使用PHP向Python套接字发送消息并打印消息。

到目前为止,这是PHP代码:

<?
$host = "localhost";
$port = 12345;

$f = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($f, SOL_SOCKET, SO_SNDTIMEO, array('sec' => 1, 'usec' => 500000));
$s = socket_connect($f, $host, $port);

$msg = "message";
$len = strlen($msg);

socket_sendto($f, $msg, $len, 0, $host, $port);

socket_close($f);
?>

这是Python的一个:

#!/usr/bin/python
# encoding: utf-8

import socket

s = socket.socket()
host = "localhost"
port = 12345
s.bind((host, port))

s.listen(5)
while True:
   c, addr = s.accept()
   print s.recv(1024)
   c.close()

但我收到以下错误:

Traceback (most recent call last):
  File "server.py", line 15, in <module>
    print s.recv(1024)
socket.error: [Errno 107] Transport endpoint is not connected

我也尝试使用socket_​sendmsgsocket_​writefwrite等等,但Python中的错误始终相同,socket.error: [Errno 107] Transport endpoint is not connected

看起来我真的迷路了。

有人可以帮助我吗?

感谢。

1 个答案:

答案 0 :(得分:4)

尝试以下方法:

import socket

s = socket.socket()
host = "localhost"
port = 12345
s.bind((host, port))

s.listen(5)
while True:
   c, addr = s.accept()
   data = c.recv(1024)
   if data: print data
   c.close()

主要问题是,当代码应该在s.recv()上时,您的代码正在调用c.recv()。另外,请确保在打印前检查收到的数据(是None?)。