首先,我想承认是的......我对这个项目感到非常满意,而我对Python和Java的有限知识几乎不知所措。
目标:使用Java中的输入SocketServer通过TCP将数据输出到另一台计算机上的Python客户端。
问题:代码工作正常,直到我将Python客户端移动到另一台计算机。没有错误,但服务器从不打印出客户端连接消息,这意味着前一行尚未执行。
JAVA SERVER:
import java.net.ServerSocket;
import java.net.Socket;
import java.io.InputStreamReader;
import java.io.DataOutputStream;
import java.io.*;
import java.util.Scanner;
public class theServer {
public static void main(String[] args) throws IOException {
{
String godeep;
int portNumber = 4000;
String fromclient;
ServerSocket Server = new ServerSocket(4000);
System.out.println("TCPServer Waiting for client on port 5000");
while (true) {
Socket connected = Server.accept();
System.out.println(" THE CLIENT" + " "
+ connected.getInetAddress() + ":"
+ connected.getPort() + " IS CONNECTED ");
DataOutputStream outToPython = new DataOutputStream(
connected.getOutputStream());
while (true) {
Scanner keyboardInput = new Scanner(System.in);
godeep= keyboardInput.nextLine();
if (godeep.equals("q")) {
outToPython.writeBytes("dothatclose");
connected.close();
break;
}
outToPython.writeBytes(godeep);
}
}
}
}
}
PYTHON客户:
import Tkinter
import RPi.GPIO as GPIO
import SocketServer
import socket
GPIO.setmode(GPIO.BOARD)
GPIO.setup(22, GPIO.OUT)
GPIO.setup(18, GPIO.OUT)
GPIO.output(18, False)
GPIO.output(22, False)
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(("192.168.1.149", 4000))
while 1:
dumbthing = client_socket.recv(4096)
if dumbthing == 'dothatclose':
client_socket.close
break
else:
datInput = raw_input()
if datInput == 'q':
GPIO.output(18, True)
GPIO.output(22, False)
elif datInput == 'w':
GPIO.output(18, False)
GPIO.output(22, True)
elif datInput == 'p':
GPIO.output(18, False)
GPIO.output(22, False)
break
else:
pass
print 'you done brah'
这是我第一次发帖,所以我不太熟悉其他信息的惯例。是的,我知道我的变量名称等等都很奇怪,但我没有希望这会起作用,我并不是那么关心。如果他们与这个问题没有关系,请随意提供有关如何改进我的代码的任何其他建议,因为我真的不知道我在做什么。感谢。