【问题标题】:Writing and Reading data to and from Socket on keyPressed()在 keyPressed() 上向 Socket 写入和读取数据
【发布时间】:2013-12-21 20:09:28
【问题描述】:

我有一个处理代码,它通过套接字读取和写入 Python 应用程序。我希望它在 keyPressed 上写入并在 keyReleased 操作上读取。

问题是,没有对这两个事件执行任何操作。它拒绝在关键操作上连接到 Socket。

这里是java代码:

import java.io.*;
import java.net.*;
String result;
String status;
String reply;

void setup(){
    size(1000, 450);
    textFont(createFont("Arial", 20));
    result = "You Said!";
    reply = "He Replied: ";
    status = "...";
}
void draw(){
    background(0);
    text(result, 0, 50);
    text(reply, 0, 150);
    text(status, 0, 250);
}
public void keyPressed() {
  status = "PRESSED";
  try {
    Socket clientSocket = new Socket("localhost", 8089);
    DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
    outToServer.writeBytes(result + '\n');
    outToServer.flush();
  }
  catch(Exception e) {
    println(e);
  }
}
public void keyReleased () {
  status = "RELEASED";
  try {
    Socket clientSocket = new Socket("localhost", 8089);
    BufferedReader inFromServer = new BufferedReader(
    new InputStreamReader(clientSocket.getInputStream()));  
    reply = inFromServer.readLine();
  }
  catch(Exception e) {
    println(e);
  }
}

套接字连接根本没有发生。状态字符串没有改变。我有什么地方出错了吗?从逻辑上讲,这似乎是正确的。

【问题讨论】:

  • 代码似乎不是有效的 Java。接下来,如果您要发送 char 数据,那么我会使用 PrintWriter 或 PrintStream。另外,我对处理不熟悉,但是许多库会要求您将后台线程用于后台进程。
  • @HovercraftFullOfEels 这在技术上不是 Java,它是处理。当我把它们放在一起时,代码运行良好,这个 keyPressed 和 keyReleased 的东西正在制造问题。否则效果很好。
  • 啊,那你应该丢掉java标签了。
  • 代码本质上是Java,因为我是从那里移植过来的。
  • 按键是怎么调用的?

标签: java python sockets networking processing


【解决方案1】:

您应该在处理中使用Client 和Server。请看以下两个小程序:

import processing.net.*;

Server s;
Client c;
String reply = "n/a";

void setup() {
  size(300, 200);
  s = new Server(this, 8089);
}

void draw()  {
  background(50);
  // Receive data from client
  c = s.available();
  if (c != null) {
    reply = c.readString();
  }

  fill(255);
  text(reply, 100, 100);  
}

和客户端代码

import processing.net.*;

Client c;
String msg;

void setup() {
  size(300, 200);
  c = new Client(this, "127.0.0.1", 8089);
}

void draw() {
  background(204);
}

void keyPressed() {
  msg = "Hello world";
  c.write(msg + "\n");
}

你需要先启动服务器。


通过尝试这个超级简单的处理草图来验证它不是由于关键事件处理方法:

import java.net.*;

try {
  Socket clientSocket = new Socket("localhost", 8089);
}
catch (Exception e) {
  println(e);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多