在keyPressed()上写入和从Socket读取数据

时间:2013-12-21 20:09:28

标签: java python sockets networking processing

我有一个处理代码,可以通过套接字读取和写入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);
  }
}

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

1 个答案:

答案 0 :(得分:0)

您应该在处理中使用ClientServer。请参阅以下两个迷你应用程序:

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);
}
相关问题