【发布时间】:2023-07-03 18:54:01
【问题描述】:
我的目标是将消息从 python 套接字发送到 java 套接字。我确实看过上面提到的资源。但是我正在努力让 Python 客户端与 Java 服务器通信。主要是因为python中的(行尾)与java中的不同。
假设我从 python 客户端写:消息 1:abcd 消息 2:efgh 消息 3:q(退出)
在 java 服务器:我收到消息 1:abcdefghq 后跟异常,因为 python 客户端已从其末端关闭套接字。
谁能为java和python之间的一致对话提出一个解决方案。
我使用的参考:http://www.prasannatech.net/2008/07/socket-programming-tutorial.html
更新:我忘了补充,我正在处理 TCP。
我的 JAVA 代码是这样的:(服务器套接字)
String fromclient;
ServerSocket Server = new ServerSocket (5000);
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 ");
BufferedReader inFromClient = new BufferedReader(new InputStreamReader (connected.getInputStream()));
while ( true )
{
fromclient = inFromClient.readLine();
if ( fromclient.equals("q") || fromclient.equals("Q") )
{
connected.close();
break;
}
else
{
System.out.println( "RECIEVED:" + fromclient );
}
}
}
我的 PYTHON 代码:(客户端套接字)
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(("localhost", 5000))
while 1:
data = raw_input ( "SEND( TYPE q or Q to Quit):" )
if (data <> 'Q' and data <> 'q'):
client_socket.send(data)
else:
client_socket.send(data)
client_socket.close()
break;
输出::
在 Python 控制台(客户端)上:
SEND(TYPE q or Q to Quit):abcd (按 ENTER)
SEND(TYPE q or Q to Quit):efgh (press ENTER)
发送(键入 q 或 Q 退出):q(按 ENTER)
在 JAVA 控制台(服务器)上:
TCPServer 在端口 5000 上等待客户端
客户端 /127.0.0.1:1335 已连接
收到:abcdefghq
【问题讨论】:
-
EOL 是 EOL ('\n') - 我认为您需要发布导致错误的最少代码
-
我忘了添加,我正在处理 TCP。
-
提个建议:String fromclient;那里分配的效率较低。在这里分配: String fromclient = inFromClient.readLine();除此之外,代码真的很不错。
-
@AmandeepChugh 如果有任何答案解决了您的问题,请接受它。