我有一个处理代码,可以通过套接字读取和写入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);
}
}
套接字连接根本没有发生。状态字符串不会更改。我有什么地方出错吗?从逻辑上看,这似乎是正确的。
答案 0 :(得分:0)
您应该在处理中使用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);
}