python实现基于Socket的客户端与服务器的对讲通信

Python015

python实现基于Socket的客户端与服务器的对讲通信,第1张

使用多线程,下面的代码,简单实现一个多线程的web服务器:

#coding=utf-8

import socket

import threading

from time import sleep

def response(sock, addr):

    print "收到请求"

    data = sock.recv(1024)

    print data

    sock.send(html)

    sock.close()

html = '''HTTP/1.1 200 OK\nContent-Type: text/html\n\r\nHello world!'''

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.bind(('0.0.0.0', 80))

s.listen(50)

print "正在等待连接……"

while 1:

    sleep(0.1)

    sock,addr = s.accept()

    t = threading.Thread(target=response, args=(sock,addr))

    t.start()

rpyc是我用过的最容易,也最强大的远程进程通讯了。当然如果你自己编写框架,可以比它更强大也可能。

你搜索一下官网或者是任意一个教程都可以找到一个解决方案,然后你变化一下就可以解决你的问题。

因为不太理解你的问题,所以先解释一下,rpyc实现的是将客户端代码,复制到服务端,并在服务端执行后将结果包装后返回服务端。当然如果服务端已经有这个代码了,就可以直接执行,然后结果返回。

所以原则上讲,不可能在客户端没有连接服务端的情形下,从服务端返回消息的。 所以你试验的应该是连接到服务端,然后获得响应。这个是可以的。

如果你想发消息到服务端直接通过函数的参数就可以啦。

import rpyc

c=rpyc.connect('localhost',服务端端口)

print c.root.服务端exposed的函数(你要传递的参数放在这里)

c.close()

服务器端:

    #!/usr/bin/env python  

    import socket  

    host="localhost"  

    port=10000  

    s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)  

    s.bind((host,port))  

    s.listen(5)  

    while 1:  

        sock,addr=s.accept()  

        print "got connection form ",sock.getpeername()  

        data=sock.recv(1024)  

        if not data:  

            break  

        else:  

            print data  

客户端:

    #!/usr/bin/env python  

    import socket  

    host="localhost"  

    port=10000  

    s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)  

    s.connect((host,port))  

    s.send("hello from client")  

    s.close()