psychopy心理学编程 socket联机通讯示例

余生颓废 提交于 2019-12-10 05:02:16

psychopy 定做实验程序 https://item.taobao.com/item.htm?spm=a230r.1.14.6.Q6E2OW&id=530690095131&ns=1&abbucket=15#detail

有的实验会用到两台电脑联机,要求被试互相为对方分配赏金或者得分,要求被试之间合作或者竞争。有时我们会用假被试,即让被试玩单机的,但却告诉他是联机的。这个方式虽然很机智,但有时也充满了遗憾——如果真的可以让被试做真正的联机任务该多好!

在这里,分享一个联机通讯脚本,以下是脚本运行过程和脚本文件。具体的思路请自行参悟,或者

from pydoc import help
import socket
help(socket.socket)

运行成果

秒拍视频 http://www.yixia.com/u/paike_r2r9ujpkf9

运行过程

  1. 把两台计算机连接到同一网络内,推荐连接在同一个WIFI下或者路由器下。使用路由器或WIFI热点的DHCP为计算机分配IP地址(通常是自动的),或者手动分配。令一台计算机为主机,令另一台为辅助机。
  2. 把service.py与client.py中的IP地址改成主机的IP地址。
  3. 把service.py拷贝到主机,把client.py拷贝到辅助机。
  4. 运行service.py,出现一个黑框。
  5. 运行client.py,主机与辅助机同时全屏出现psychopy界面。
  6. 在辅助机上按任意键,会显示在主机上。按"q"键结束。

示例代码

service.py

# -*- coding: utf-8 -*-
"""
Created on Sun Sep 04 22:53:45 2016

@author: zbg
"""

import socket
import sys
import threading

def WaitFor(connect, s):
    while connect.recv(1024) != s:
        pass


HOST = '192.168.1.102'
PORT = 8888 
data = ''

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(10)
                    

con, addr = s.accept()
WaitFor(con, 'start')



from psychopy.visual import Window, ImageStim, TextStim
from psychopy import core, event, gui, clock
done = False
win = Window(fullscr = True)
while not done:
    key = con.recv(1024)
    if key =='q':
        done = True
    
    t =TextStim(win, key ,pos=(0,-0.0), height = 1.5)
    t.draw()
    win.flip()

win.close()
s.close()

client.py

# -*- coding: utf-8 -*-
"""
Created on Mon Sep 05 16:33:06 2016

@author: zbg
"""

import socket
import threading


ip = '192.168.1.102'
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((ip, 8888))
sock.send('start')

from psychopy.visual import Window, ImageStim, TextStim
from psychopy import core, event, gui, clock

win = Window(fullscr = True)
t =TextStim(win, u"我是键盘,按q退出" ,pos=(0,-0.0))
t.draw()
win.flip()

keys = event.getKeys()
while 'q' not in keys:
    if len(keys) > 0:
        print keys[0]
        sock.send(keys[0])
    keys = event.getKeys()

sock.send('q')
sock.close()
win.close()

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!