TCP(服务器)和Python(客户端)之间的TCP套接字在不同的机器上

时间:2014-11-12 06:31:23

标签: java python sockets tcp raspberry-pi

首先,我想承认是的......我对这个项目感到非常满意,而我对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'

这是我第一次发帖,所以我不太熟悉其他信息的惯例。是的,我知道我的变量名称等等都很奇怪,但我没有希望这会起作用,我并不是那么关心。如果他们与这个问题没有关系,请随意提供有关如何改进我的代码的任何其他建议,因为我真的不知道我在做什么。感谢。

0 个答案:

没有答案