小编Mor*_*gan的帖子

TypeError:str不支持缓冲区接口

我正在尝试在python中创建一个简单的客户端和服务器消息传递程序,并且我不断收到错误"TypeError:'str'不支持缓冲区接口"并且甚至不知道这意味着什么.我大部分时间都是python的初学者,还有一个完整的网络连接器.

我假设由于某种原因我无法发送字符串数据?如果是这种情况,我将如何发送字符串?

作为参考,我得到的大部分内容的示例代码是python 2.x,我在Python 3中这样做,所以我相信这是从版本转换中解决的另一个问题.我一直在寻找相同的问题,但无法真正弄清楚如何对我的情况应用相同的修复.

这是服务器的开始代码:

import socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(("", 5000))
server_socket.listen(5)

print("TCP Server Waiting for client on port 5000")

while 1:
    client_socket, address = server_socket.accept()
    print("TCP Server received connect from: " + str(address))
    while 1:
        data = input("SEND(Type q or Q to quit):")
        if(data == 'Q' or data == 'q'):
            client_socket.send(data)
            client_socket.close()
            break;
        else:
            client_socket.send(data)
            data = client_socket.recv(512)

        if(data == 'q' or data == 'Q'):
            client_socket.close()
            break;
        else:
            print("Received: " + data)
Run Code Online (Sandbox Code Playgroud)

python

16
推荐指数
1
解决办法
5万
查看次数

PDO错误:"参数号无效:参数未定义"

我试图使用一个简单的MySQL插入查询与数组形式的参数.它一直告诉我参数的数量是错误的.我试过以下,都产生了同样的错误:

$stmt3 = $link->prepare('INSERT INTO messages VALUES(null, :room, :name, :message, :time, :color)');
$stmt3->execute(array(':room' => $Clean['room'],':name' => $Clean['name'],':message' => $Clean['message'],':time' => $time,':color:' => $Clean['color']));
Run Code Online (Sandbox Code Playgroud)

$stmt3 = $link->prepare('INSERT INTO messages VALUES(:null, :room, :name, :message, :time, :color)');
$stmt3->execute(array(':null' => null, ':room' => $Clean['room'],':name' => $Clean['name'],':message' => $Clean['message'],':time' => $time,':color:' => $Clean['color']));
Run Code Online (Sandbox Code Playgroud)

以及专门声明列以避免空插入:

$stmt3 = $link->prepare('INSERT INTO messages (room, name, message, time, color) VALUES(:room, :name, :message, :time, :color)');
$stmt3->execute(array(':room' => $Clean['room'],':name' => $Clean['name'],':message' => $Clean['message'],':time' => $time,':color:' => $Clean['color']));
Run Code Online (Sandbox Code Playgroud)

这是我第一次使用PDO(我通常使用mysqli,但我当前的共享主机没有mysqlnd插件,阻止我使用prepare(),所以从这个角度来看任何洞察都是值得赞赏的.

php mysql pdo prepared-statement parameterized-query

5
推荐指数
1
解决办法
2万
查看次数

替代setInterval等待函数完成

目前,我正在使用setInterval运行几个调用PHP页面的AJAX函数 -

var intervalOne = setInterval(ajaxfunction, 1500);
Run Code Online (Sandbox Code Playgroud)

这在具有微小响应时间的测试服务器上工作正常.然而,偶尔在我的实时服务器上,会有一些延迟,并且间隔时间将在第一个完成之前再次出现,重复相同的调用,并导致重复数据出现.

有没有办法保持相同的间隔时间,但如果第一个尚未完成,还等待调用该函数吗?

另外,有没有什么我可以放在AJAX调用的readystate部分,让它们一旦完成就会再次触发它们?

编辑 - 我的一个ajax调用示例:

function Send() {
var name = document.getElementById('name').value;
var message = document.getElementById('message').value;

var xmlhttp = getXMLHttp();

xmlhttp.onreadystatechange = function() {
    if(xmlhttp.readyState == 4)
    {
        document.getElementById('message').value = "";

        if(xmlhttp.responseText != "") {
            var chat = document.getElementById('messagebox');
            chat.innerHTML = chat.innerHTML + '<div class=\"alert\">' + xmlhttp.responseText + '</div>';
            chat.scrollTop = 1000000000;
        }
    }
}

xmlhttp.open("POST","submit_message.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("name=" + name + "&message=" + message);

}
Run Code Online (Sandbox Code Playgroud)

javascript ajax

5
推荐指数
2
解决办法
1万
查看次数

即使评估为真,语句也不会执行

在下面的代码中,下面的块if(timesout[entry] == "exit")将永远不会执行.我已经验证timesout[entry]了当前循环在调试模式下被设置为"exit",以及在if语句被评估之前打印出变量,但无论如何,当我exit在提示符处输入时,块永远不会执行,而我我很难过为什么.

import java.util.Scanner;

public class timetracker {
public static void main(String args[]) {
    boolean exit = false;
    String[] reasons = new String[30];
    String[] timesout = new String[30];
    String[] timesin = new String[30];
    int entry = 0;
    Scanner keyinput = new Scanner(System.in);

    recordloop:
    while(exit == false) {
        //record info



        System.out.println("Enter time out:");
        timesout[entry] = keyinput.nextLine();

        if(timesout[entry] == "exit") {
            exit = true;
            break recordloop;   
        }

        System.out.println("Enter reason:");
        reasons[entry] = keyinput.nextLine();
        System.out.println("Enter time in:"); …
Run Code Online (Sandbox Code Playgroud)

java

1
推荐指数
1
解决办法
1705
查看次数